2017-04-23 7 views
0

lodashと2つの配列を組み合わせたいが、キャッチがある。 itemのidが同じ場合は、代わりに2番目の配列から1つを選択します。 例:idが同じならjavascriptで2つの配列を結合するlodashで2番目の配列の配列を選択

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

? 'score'プロパティ?あなたはお問い合わせを解決しようとしましたか? – guest271314

+0

@ guest271314 2つ目の配列は各オブジェクトに1つ以上のフィールドを持つという違いが1つだけあります。もし私が一緒に参加し、各配列のオブジェクトのidが同じなら、スコアフィールドを持つものを取ってみたい。 – thestrayed

+0

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

答えて

1

プレーンJavaScriptでは、Mapを使用して2番目の配列の項目が存在するかどうかを確認し、2番目の配列の項目が存在するかどうかをチェックし、そうでなければ1番目の配列から2番目の配列の項目を取得できます。

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ハッシュテーブルとオブジェクトと。あなたは違いを知っているだろうか。質問で `javascript`考える

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

関連する問題