如何用地图替换 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))