2017-04-23 54 views
0

我想將兩個數組一起使用lodash但有一個問題。如果項目具有相同的ID,請從第2個數組中選擇一個。 例子:在JavaScript中結合兩個數組如果id相同,請在第2個數組上使用lodash

let arr1 = [{ id: 1, name: 'name1'}, { id: 2, name: 'name2'}, { id: 3, name: 'name3'}]; 
let arr2 = [{ id: 3, name: 'name3', score: 1}]; 

預期結果

[{ id: 1, name: 'name1'}, { id: 2, name: 'name2'}, { id: 3, name: 'name3', score: 1}]; 

任何想法,如何做到這一點。給我一些想法。先謝謝你。

+0

鑑於'javascript'在問你怎麼知道有什麼區別? '分數'屬性?你試圖解決什麼問題? – guest271314

+0

@ guest271314只有一個區別是第2個數組在每個對象中會有一個字段。如果我將它們連接在一起,並且每個數組中的對象的ID是相同的,那麼我想要使用具有分數字段的對象。 – thestrayed

+0

'var res = Object.assign([],arr1,arr2)' – guest271314

回答

1

用簡單的Javascript語言,可以使用Map並檢查第二個數組的項是否存在,然後從第二個數組中取出第二個數組的項。

let array1 = [{ id: 1, name: 'name1'}, { id: 2, name: 'name2'}, { id: 3, name: 'name3'}], 
 
    array2 = [{ id: 3, name: 'name3', score: 1}], 
 
    map2 = new Map(array2.map(a => [a.id, a])), 
 
    result = array1.map(a => map2.get(a.id) || a); 
 
    
 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

ES5與對象作爲哈希表。

var array1 = [{ id: 1, name: 'name1'}, { id: 2, name: 'name2'}, { id: 3, name: 'name3'}], 
 
    array2 = [{ id: 3, name: 'name3', score: 1}], 
 
    map2 = array2.reduce(function (r, a) { 
 
     r[a.id] = a; 
 
     return r; 
 
    }, Object.create(null)), 
 
    result = array1.map(function (a) { 
 
     return map2[a.id] || a; 
 
    }); 
 
    
 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

也許ES5版本適合你。 –

+0

我現在明白了,我沒有仔細閱讀答案。謝謝 – thestrayed