如何用地图替换 Javascript 中以下内容的 forEach
How to replace forEach with map for the below in Javascript
有两个数组,都具有 id 属性和其他属性。
要求是比较两个数组并创建新的以将 age 属性 添加到 arr1
中的相应对象
let arr1 = [{
id: 1,
name: 'a'
}, {
id: 2,
name: 'b'
}, {
id: 3,
name: 'c'
}];
let arr2 = [{
id: 1,
age: 20
}, {
id: 3,
age: 35
}];
const newArr = [];
arr1.forEach(obj => {
return arr2.forEach((obj2) => {
if (obj.id === obj2.id) {
newArr.push(Object.assign({}, obj, {
age: obj2.age
}))
}
})
})
console.log(newArr);
//outputs [{id:1, name: 'a', age:20}, {id:3, name: 'c', age:35}]
我不知道这是否是最优雅的解决方案,但您可以创建您的函数并使用它进行映射:
let arr1 = [{
id: 1,
name: 'a'
}, {
id: 2,
name: 'b'
}, {
id: 3,
name: 'c'
}];
let arr2 = [{
id: 1,
age: 20
}, {
id: 3,
age: 35
}];
function addAge(elt, arr2) {
let elt_w_age = arr2.find(x => x.id === elt.id);
if (elt_w_age != null) {
elt.age = elt_w_age.age
return elt
}
else {
return null
}
}
console.log(arr1.map(x => addAge(x, arr2)).filter(x => x !== null))
有两个数组,都具有 id 属性和其他属性。 要求是比较两个数组并创建新的以将 age 属性 添加到 arr1
中的相应对象let arr1 = [{
id: 1,
name: 'a'
}, {
id: 2,
name: 'b'
}, {
id: 3,
name: 'c'
}];
let arr2 = [{
id: 1,
age: 20
}, {
id: 3,
age: 35
}];
const newArr = [];
arr1.forEach(obj => {
return arr2.forEach((obj2) => {
if (obj.id === obj2.id) {
newArr.push(Object.assign({}, obj, {
age: obj2.age
}))
}
})
})
console.log(newArr);
//outputs [{id:1, name: 'a', age:20}, {id:3, name: 'c', age:35}]
我不知道这是否是最优雅的解决方案,但您可以创建您的函数并使用它进行映射:
let arr1 = [{
id: 1,
name: 'a'
}, {
id: 2,
name: 'b'
}, {
id: 3,
name: 'c'
}];
let arr2 = [{
id: 1,
age: 20
}, {
id: 3,
age: 35
}];
function addAge(elt, arr2) {
let elt_w_age = arr2.find(x => x.id === elt.id);
if (elt_w_age != null) {
elt.age = elt_w_age.age
return elt
}
else {
return null
}
}
console.log(arr1.map(x => addAge(x, arr2)).filter(x => x !== null))