簡體   English   中英

將對象數組作為Node.js中Array對象的值

[英]Making an array of object a value of a object in Array in Node.js

我有兩個對象數組。

 data1 = [{
     foo: '2',
     box: 'yes',
     id: '1234'
 }, {
     foo: '34',
     box: 'no',
     id: '1235'
 }];

 data2 = [{
     key: 'value',
     key: 'value',
     id: '1234'
 }, {
     key: 'value',
     key: 'value',
     id: '1235'
 }];

我需要它基於匹配的id值:每個obj都有一個唯一的密鑰id,就是第二個數組。

finalData = [{
    foo: '2',
    box: 'yes',
    id: '1234',
    key: 'value',
    key: 'value'
}, {
    box: '34',
    box: 'no',
    id: '1235',
    key: 'value',
    key: 'value'
}];

基本上根據鍵id合並兩個對象數組。

為此使用Object.assign ,以便您可以將數組與公共id值組合,使用find having condition來比較兩個對象的id

 var data1 =[ {foo:'2',box:'yes',id:'1234'},{foo:'34',box:'no',id:'1235'} ]; var data2 =[{key:'value',key2:'value2', id:'1234'},{key:'value',key2:'value2', id:'1235'}]; data1.map(x => Object.assign(x, data2.find(y => y.id == x.id))); console.log(data1); 

由於您具有多次相同的鍵名,JSON對象會忽略該名稱,因此我為此示例采用了新的屬性名稱key2

建立在@Ankit的答案上,你也可以使用傳播運營商! 這樣的事情

 var data1 =[ {foo:'2',box:'yes',id:'1234'},{foo:'34',box:'no',id:'1235'} ]; var data2 =[{key:'value',key2:'value2', id:'1234'},{key:'value',key2:'value2', id:'1235'}]; const arr = data1.map(x => ({ ...x, ...data2.find(y => y.id == x.id)})); console.log(arr); 

您還可以使用reduce()find()Object.assign()來獲取所需的結果。

DEMO

 const data1 = [{foo: '2',box: 'yes',id: '1234'}, {foo: '34',box: 'no',id: '1235'}], data2 = [{key: 'value',key1: 'value',id: '1234'}, {key: 'value',key1: 'value',id: '1235'}]; let result = data1.reduce((r,{id,...rest})=>{ let find=data2.find(o=>o.id==id); if(find){ r.push(Object.assign(rest,find)); } return r; },[]) console.log(result) 
 .as-console-wrapper {max-height: 100% !important;top: 0;} 

以下是實現此目的的另一種方法:

  • 迭代第一個數組並創建一個新的Map對象,其中id將用作鍵,相關對象用作其值。
  • 迭代第二個數組並使用Map對象中的Object.assign()更新具有相同ID的相應對象。
  • 返回Map對象中的更新對象數組。

演示:

 let data1 = [{foo: '2', box: 'yes', id: '1234'}, {foo: '34', box: 'no', id: '1235'}], data2 = [{key1: 'value', key2: 'value', id: '1234'}, {key1: 'value', key2: 'value', id: '1235'}]; let merge = (d1, d2, m = new Map(d1.map(o => [o.id, o]))) => ( d2.forEach(o => m.set(o.id, Object.assign(m.get(o.id), o))), [...m.values()] ); console.log(merge(data1, data2)); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

文檔:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM