为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

哔哔one 2023-07-29 15:58:18
我有两个类似这样的 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”,反之亦然
查看完整描述

2 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

使用,您可以对项目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);


查看完整回答
反对 回复 2023-07-29
?
冉冉说

TA贡献1877条经验 获得超1个赞

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 : []

  }

});


查看完整回答
反对 回复 2023-07-29
  • 2 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信