如何从嵌套数组中拼接一个数组 - JavaScript

4
我试图从父数组中剪切出一个嵌套的数组。考虑以下数组。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]。我到底错过了什么!?


1
不需要使用splice。只需要使用items[0]即可。 - StackSlave
1
我想修改原始数组,然后根据切片数组的一个元素选择一个值。 - Afs35mm
5个回答

5

MDN 提供了 Array.prototype.splice 方法的说明:

返回值

一个数组,包含已删除的元素。如果仅删除一个元素,则返回一个只包含该元素的数组。如果没有删除任何元素,则返回一个空数组。

因此,它不会仅仅返回已删除的元素,而是会用数组将其包裹起来。


有点疯狂,我从来不知道splice会自动将其放置在新创建的数组中,我只是一直以为它之所以能够这样工作是因为它是从已经存在的数组中取出的。 仔细想想,这很有道理,因为Array.prototype.slice.call(arguments)也是这样工作的,考虑到它只是一个类似数组的对象 :) - Afs35mm

0

splice() 可以改变数组的内容,并返回一个包含已删除元素的数组。

在您的情况下,原始数组中的元素也可能是数组。这可能会让您感到困惑。


0

.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://dev59.com/MGsz5IYBdhLWcg3weHuU#7875193/
var arr = [].concat.apply([], item);

console.log(item[0], arr);


-1
要替换二维数组,您应该使用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);

-1
你应该引用 items 中的第一个数组,然后对其进行 splice 操作。请尝试以下示例代码。

var items = [[1,2],[3,4],[5,6]];

var item = items[0].splice(0,2);

console.log(item);


但这会使 items 处于一种奇怪的状态: [ [], [3, 4], [5, 6] ] - dpdearing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接