2017-10-18 98 views
2

需要一點幫助。我搜索了當前的問題,但沒有找到好的例子。將兩個陣列合併爲一個具有相同數量對象的陣列

我有兩個數組與對象相同的計數:

array1 = [{ id: 1, name: 'Johnny'}, { id: 2, name: 'Mike'}]; 
array2 = [{ hair: 'black'}, { hair: 'white'}]; 

我需要

array3 = [ 
    { id: 1, name: 'Johnny', hair: 'black'}, 
    { id: 2, name: 'Mike', hair: 'white'} 
] 

我試着推[... ES6]幾種方法,但我總是返回4個對象而不是2

+0

所以對象的2個不同陣列相同索引的屬性應該合併? – gurvinder372

+0

是的,相同的索引對象返回一個合併了鍵和值的對象 –

回答

5

ES6使用Object.assign:

var array1 = [{ id: 1, name: 'Johnny'}, { id: 2, name: 'Mike'}]; 
 
var array2 = [{ hair: 'black'}, { hair: 'white'}]; 
 
var merged = array1.map((el, index) => Object.assign(el, array2[index])); 
 
console.log(merged);

+0

打了我幾秒 –

+0

謝謝!那是我一直在尋找的。 –

+0

@AlekseyTrofimenko別忘了接受答案 – Faly

1

你可以在一個對象以相同的索引使用Array#reduceArray#mapObject.assign數組和地圖對象的一個​​任意的數量。

var array1 = [{ id: 1, name: 'Johnny'}, { id: 2, name: 'Mike'}]; 
 
    array2 = [{ hair: 'black'}, { hair: 'white'}], 
 
    result = [array1, array2] 
 
     .reduce((r, a) => a.map((o, i) => Object.assign(r[i] || {}, o), [])); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }