下記のようなオブジェクトがあります。
JavaScript
1const objArr1 = [ 2 { 3 id: '1', 4 name: 'nyaa', 5 }, 6 { 7 id: '2', 8 name: 'myoon', 9 }, 10]; 11 12const objArr2 = [ 13 { 14 id: '1', 15 kg: '20', 16 }, 17 { 18 id: '2', 19 kg: '30', 20 }, 21 { 22 id: '3', 23 kg: '100', 24 }, 25]; 26
オブジェクト内のIDが一致していれば、オブジェクトを合体させたいです。
下記のような結果を期待します。
JavaScript
1const result = [ 2 { id: '1', name: 'nyaa', kg: '20' }, 3 { id: '2', name: 'myoon', kg: '30' } 4]
考えた解決策は下記のコードですが、無駄が多いと思います……。
オブジェクトを2回mapで回してidが一致していたものを返し、それ以外はnullが返り、flat()してfilterでnullを消してます。
一応想定通りに動いています(nestしたときどうかは不明だが、nestしない予定なのでいまのところは良し)
JavaScript
1const result = objArr1 2 .map((obj) => { 3 const obj3 = objArr2.map((obj2) => { 4 if (obj.id === obj2.id) return { ...obj, ...obj2 }; 5 return; 6 }); 7 return obj3; 8 }) 9 .flat() 10 .filter(Boolean); 11
もっときれいな解決法はないでしょうか。
なんらかのライブラリを使用しても大丈夫です(ramda.jsなど)。
回答2件
あなたの回答
tips
プレビュー