我试图将一个嵌套数组从它的父数组中拼接出来。考虑下面的数组。items.splice(0,1)
应该给我第一个嵌套数组([1,2]),但它似乎给了我第一个嵌套数组,仍然嵌套在数组内:
var items = [[1,2],[3,4],[5,6]];
var item = items.splice(0,1); // should slice first array out of items array
console.log(item); //should log [1,2], instead logs [[1,2]]
然而,它似乎在另一个数组中返回所需的数组(第一项)。我不能得到完整的数组,除非我做item[0]
。我到底错过了什么?
MDN显示Array.prototype.splice
:
返回包含已删除元素的数组。如果只删除一个元素,则返回一个只有一个元素的数组。如果不删除任何元素,则返回空数组。
所以,它不会只返回被删除的元素,它会被包装在一个数组中
splice()
更改数组的内容,并返回一个包含已删除元素的数组。
在您的示例中,原始数组的元素恰好也是数组。
.splice()
返回item
的正确数组;尝试选择索引0
返回数组返回[1,2]
;为了"平坦"item
,试着利用Array.prototype.concat()
;参见如何在jQuery中扁平化数组?
var items = [[1,2],[3,4],[5,6]];
var item = items.splice(0,1); // should slice first array out of items array
// https://stackoverflow.com/a/7875193/
var arr = [].concat.apply([], item);
console.log(item[0], arr);
要替换二维数组,您应该使用array[row][col],例如
for(var row = 0; row < numbers.length; row++) {
for(var col = 0; col < numbers[row].length; col++) {
if (numbers[row][col] % 2 === 0) {
numbers[row][col] = "even";
} else {
numbers[row][col] = "odd";
}
}
}
console.log(numbers);
您应该在items中引用第一个数组,然后将其拼接。试试下面的代码片段。
var items = [[1,2],[3,4],[5,6]];
var item = items[0].splice(0,2);
console.log(item);