将数组中未知数量的子数组合并

3

我有一个像这样的数组:

arr = [ [[x,x],[x,x]], [[x,x],[x,x],[x,x]], [[x,x]] ]

我希望将其转换为如下格式的数组:

arr = [  [x,x],[x,x] ,  [x,x],[x,x],[x,x],   [x,x]  ]

所以我尝试了这个:

for (var i=1; i< arr.length; i++){ arr[0].concat(arr[i]); }

但是它不起作用。我该如何“合并”这个中间级别的数组?

它为什么“不起作用”?它输出什么?它是否给出任何错误?你为什么要从“var i = 1”开始? - gen_Eric
从i=1开始,因为i=0将是arr[0],我想要将其他子数组添加到它上面。 - grateful
3个回答

11

使用ES6,您可以在concat()中使用展开语法

var arr = [ [['x','x'],['x','x']], [['x','x'],['x','x'],['x','x']], [['x','x']] ]

var merged = [].concat(...arr)
console.log(JSON.stringify(merged))

对于较旧版本的ecmascript,可以使用concat()apply()来完成相同的操作。

var arr = [ [['x','x'],['x','x']], [['x','x'],['x','x'],['x','x']], [['x','x']] ]

var merged = [].concat.apply([], arr)
console.log(JSON.stringify(merged))


太好了!这正是我正在寻找的高效代码和新学习内容。三个点(...)代表什么意思? - grateful
这是 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Spread_operator - Nenad Vracar

2

这正是Array.prototype.flat()所做的。

var arr = [ [['x','x'],['x','x']], [['x','x'],['x','x'],['x','x']], [['x','x']] ]

var merged = arr.flat()
console.log(JSON.stringify(merged))

[["x","x"],["x","x"],["x","x"],["x","x"],["x","x"],["x","x"]]




1

array.concat() 方法不会改变你调用它的数组,而是返回一个新的数组——一个你正在忽略的新数组。

你应该创建一个 result 数组,然后将所有内容附加到其中,而不是尝试修改 arr

var arr = [ [['x','x'],['x','x']], [['x','x'],['x','x'],['x','x']], [['x','x']] ];
var new_arr = [];

for(var i = 0; i < arr.length; i++){
    new_arr = new_arr.concat(arr[i]);
}

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