如何比较两个数组并在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匹配的情况下更改名称?的主要内容,如果未能解决你的问题,请参考以下文章