2017-03-31 44 views
1

子陣列我有一個這樣的數組:合併數目不詳的陣列

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

但它不起作用。我怎樣才能'合併'這個中間級別的數組?

+0

這是怎麼「不起作用」?它提供了什麼輸出?它會給出任何錯誤嗎?你爲什麼從'var i = 1'開始? –

+0

從i = 1開始,因爲i = 0將是arr [0],我想添加其他子數組。 – grateful

回答

3

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

+0

太棒了!只是那種高效的代碼和我正在尋找的新東西。點點(...)是什麼意思? – grateful

+0

這是https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator –

1

array.concat()不會改變你怎麼稱呼它的陣列,而是返回一個陣列 - 一個新的數組被您忽略的。

您應該創建一個結果數組,然後將所有內容附加到該數組中,而不是嘗試修改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]); 
}