比较两个 json 对象并根据匹配键将数据从一个对象获取到另一个对象

我有两个类似这样的 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 中,则在 res1 字段中填充“N/A”,反之亦然


哔哔one
浏览 154回答 2
2回答

30秒到达战场

使用,您可以对项目Array.prototype.reduce进行分组和合并。uidconst 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);

冉冉说

res1使用map循环,找到res2具有相同 uid 的项目并返回新对象。const result = res1.map(item => {  const index = res2.findIndex(item2 => item2.uid === item.uid)  return {    ...item,    Status: index !== -1 ? res2[index].Status : []  }});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript