如何比较两个数组并在id匹配的情况下更改名称?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何比较两个数组并在id匹配的情况下更改名称?相关的知识,希望对你有一定的参考价值。

我有一个学生数组,如下所示

student=[{id:1,name:'Sam',age:23},{id:2,name:'Jolia',age:23},{id:3,name:'Peter',age:23}]

我还有另一个包含了一些学生的最新年龄值,比如下面的例子。

updated=[{id:2,age:25},{id:3,age:21}]

在本例中,我想通过这两个数组的Id找到交叉点,然后用更新后的数组改变学生数组的年龄值。

预期结果

 student=[{id:1,name:'Sam',age:23},{id:2,name:'Jolia',age:25},{id:3,name:'Peter',age:21}]

id:2和id:3的值发生了变化,因为update包括这些id值。

我试着用map来迭代两个数组,但没有成功,而且我觉得不合理。

updated.map(e=>{
   if(e.id==student.map(j=>{j.id})){
     e.age=j.age;
   }
 }) 
答案

let updated=[{id:2,age:25},{id:3,age:21}];
let student=[{id:1,name:'Sam',age:23},{id:2,name:'Jolia',age:23},{id:3,name:'Peter',age:23}];
student.forEach(e =>{
  let idx = updated.findIndex(u => u.id == e.id);
  if(idx >=0) {
      e.age = updated[idx].age;
  }
});

console.log(student);
另一答案

var student=[{id:1,name:'Sam',age:23},{id:2,name:'Jolia',age:23},{id:3,name:'Peter',age:23}];
var updated=[{id:2,age:25},{id:3,age:21}];

updated.forEach(delta => {
  student.forEach(record => {
    if (delta.id === record.id) {
      record.age = delta.age;
      return false;
    }
  });
});

console.log(student);

以上是关于如何比较两个数组并在id匹配的情况下更改名称?的主要内容,如果未能解决你的问题,请参考以下文章

比较两个对象数组并在新数组中返回匹配值

比较两个对象数组,并将匹配值的元素排除到JS中的新数组中

如何在没有匹配索引的情况下比较来自两个 DF 的两个日期?

如何在不使用 strcmp 和方括号的情况下比较字符串?

如何提取json数组并在没有tableview的情况下使用它

将两个 csv 文件与 python pandas 进行比较