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

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)

    }

^ 这显然行不通——但我想知道在这里扩展或推送是否合适。


在此先感谢您的帮助(抱歉这可能是个骗局)。


慕容3067478
浏览 153回答 2
2回答

qq_花开花谢_0

转换arrInfo为Map,以name为键。现在映射 arrNames并添加您从arrInfoMap使用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)

慕斯709654

你可以这样做: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'  }];// do thisconst result = arrNames.map((item) => {  const newItem = item; // here we define a new object that is the same as your object that is currently looped up to in your arrNames array  // loop your second array over this currently looped to object, seeing if the name matches  arrInfo.forEach((item2) => {    if (item.name === item2.name) {      newItem.info = item2.info; // if they do set a new property for your new object called info as the info from item 2 of this arrInfo array    }  });  // return this new object whether or not there was a match for the name property  return newItem; });console.log(result);所以你的 map 方法的问题是你需要记住在你的回调函数结束时返回一些东西。您只是推送到一个数组,就像使用.mapas a 一样forEach。Map 将一个数组转换为另一个相同长度的数组。在这里,您正在尝试创建一个新数组,其中被循环的数组元素将有一个额外的info属性,如果它与您的第二个数组arrInfo的名称相匹配。因此,您可以做的是在地图中使用 forEach 来检查它们是否匹配,如果匹配,则向您的 arrayNames 元素添加一个新属性,并将其作为新创建的数组的新元素返回。希望有所帮助,如果您需要,请在评论中要求澄清。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript