簡體   English   中英

比較兩個 json object 並根據匹配鍵從一個取數據到另一個

[英]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.

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