映射两个数组以查看一个属性是否匹配,然后将特定信息推入第一个数组中

问题描述 投票:0回答:1

是javascript新手,正在尝试学习!我正在尝试映射两个对象数组,如果某个属性匹配,则将特定信息拉入第一个数组。

let result;

let arrNames = [{
  id: 10  
  name: "A"
}, {
  id: 11,
  name: "B"
}, {
  id: 12,
  name: "C"
}, }, {
  id: 13,
  name: "A"
}, {
  id: 14,
  name: "B"
}]

let arrInfo = [{
  name: "A",
  info: "AAA"
}, {
  name: "B",
  info: "BBB"
}, {
  name: "C",
  info: "CCC"
}]

如果arrNames.name == arrInfo.name,我想将信息推送到名称数组中。

所需结果:

let arrNames = [{
  id: 10  
  name: "A",
  info: "AAA"
}, {
  id: 11,
  name: "B",
  info: "BBB"
}, {
  id: 12,
  name: "C",
  info: "CCC"
}, }, {
  id: 13,
  name: "A",
  info: "AAA"
}, {
  id: 14,
  name: "B",
  info: "BBB"
}]

我尝试过的:

const res = arrInfo.map((el, index) => {
      if(el.name == arrNames[index].name) 
        arrNames.push(el.info)
    }

^这显然不起作用-但我想知道在这里extend或push是否合适。

感谢您的帮助(抱歉,这很可能是骗子)。

javascript arrays object foreach array.prototype.map
1个回答
0
投票

arrInfo为键,将name转换为地图。现在映射arrNames,并通过name添加从地图中获得的项目:

const arrNames = [{"id":10,"name":"A"},{"id":11,"name":"B"},{"id":12,"name":"C"},{"id":13,"name":"A"},{"id":14,"name":"B"}]

const arrInfo = [{"name":"A","info":"AAA"},{"name":"B","info":"BBB"},{"name":"C","info":"CCC"}]

const arrInfoMap = new Map(arrInfo.map(o => [o.name, o]))

const result = arrNames.map(o => ({ ...o, ...arrInfoMap.get(o.name) }))

console.log(result)
© www.soinside.com 2019 - 2024. All rights reserved.