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

时间:2017-03-31 14:13:23

标签: javascript

我有一个这样的数组:

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]); }

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

2 个答案:

答案 0 :(得分:4)

使用ES6,您可以将spread syntaxconcat()

一起使用

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))

答案 1 :(得分:1)

array.concat()不会更改您调用它的数组,而是返回 new 数组 - 您忽略的新数组。

您应该创建结果数组,然后将所有内容附加到该数组,而不是尝试修改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]);
}