[英]Compare two json object and fetch data from one into another based on matching key
我有兩個類似這樣的 json 響應,基本上需要從 res2 中提取“狀態”並根據匹配的uid插入 res1
res1 = [
{
uid: 'RBZ7K2122715',
Model: Mod1,
lastReceived: date1
},
{
uid: 'RBZ7K2123333',
Model: Mod2,
lastReceived: date2
}
]
res2 = [
{
uid: 'RBZ7K2122715',
Status: [ [Object1], [Object2], [Object3] ]
},
{
vin: 'RBZ7K2123333',
Status: [ [Object4], [Object5] ]
}
]
我想得到這樣的回應:
result = [
{
uid: 'RBZ7K2122715',
Model: Mod1,
lastReceived: date1,
Status: [ [Object1], [Object2], [Object3] ]
},
{
uid: 'RBZ7K2123333',
Model: Mod2,
lastReceived: date2,
Status: [[Object4], [Object5]]
}
]
如果任何特定的 uid 不存在於 res1 中但存在於 res2 中,在這種情況下用“N/A”填充 res1 文件,反之亦然
使用Array.prototype.reduce
,您可以按uid
分組並合並項目。
const res1 = [ { uid: 'RBZ7K2122715', Model: 'Mod1', lastReceived: 'date1' }, { uid: 'RBZ7K2123333', Model: 'Mod2', lastReceived: 'date2' } ]; const res2 = [ { uid: 'RBZ7K2122715', Status: [ ['Object1'], ['Object2'], ['Object3'] ] }, { vin: 'RBZ7K2123333', Status: [ ['Object4'], ['Object5'] ] } ]; const groupBy = [...res1, ...res2].reduce((acc, cur) => { acc[cur.uid]? acc[cur.uid] = {...acc[cur.uid], ...cur }: acc[cur.uid] = cur; return acc; }, {}); const output = Object.values(groupBy); console.log(output);
使用map循環res1
,找到具有相同 uid 的res2
的項目並返回新的 object。
const result = res1.map(item => {
const index = res2.findIndex(item2 => item2.uid === item.uid)
return {
...item,
Status: index !== -1 ? res2[index].Status : []
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.