映射两个对象数组,匹配属性并将特定信息存储在新数组中

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

是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"
}]

我尝试过的:

arrNames.map(x => {
if(arrNames.name == arrInfo.name){
   result=arrInfo.info
}

^这显然不起作用-但我想知道Assign或Filter是否合适。

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

javascript arrays object prototypejs array.prototype.map
3个回答
0
投票
let result = [];

arrNames = [
   {name: "A"},
   {name: "B"},
   {name: "C"},
]

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

result = arrNames.map(function(_, index){
  if(arrNames[index].name === arrInfo[index].name) {
    return arrInfo[index].info
  }
})

0
投票

您可以使用内部条件的地图

el.name === arrNames[index].name && el.info

方式:

if (el.name === arrNames[index].name) return el.info

let arrNames = [{
  name: "A"
}, {
  name: "B"
}, {
  name: "C"
}]

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


const res = arrInfo.map((el, index) => el.name === arrNames[index].name && el.info)

console.log(res)

0
投票

您可以在find()中使用map()查找元素。即使它们在两个数组中的索引都不相同,也会找到该元素。

然后使用filter()过滤如果没有匹配项将出现的任何undefined值。

var arrNames = [
   {name: "A"},
   {name: "B"},
   {name: "C"}
];

var arrInfo = [
   {name: "A", info: "AAA"},
   {name: "B", info: "BBB"},
   {name: "C", info: "ccc"}
];

let result = arrNames.map(x => {
  item = arrInfo.find(item => item.name === x.name);
  if (item) { 
    return item.info;
  }      
}).filter(item => item !== undefined); // Can also use filter(item => item);

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