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

6

我刚学习JavaScript,正在尝试学习!我想要遍历两个对象数组,如果某个属性匹配,则将特定信息添加到一个数组中。

let result;

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

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


如果arrNames.name等于arrInfo.name,我希望结果等于arrInfo.info。
我的尝试:
arrNames.map(x => {
if(arrNames.name == arrInfo.name){
   result=arrInfo.info
}

^ 这显然是无法正常工作的 -- 但我想知道适合使用 Assign 还是 Filter。

提前感谢您的帮助(抱歉这可能是一个重复问题)!


不要修改问题,如果已有答案回答了您的原始问题,请提出新问题(我看到您已经这样做了)。回滚到以前的版本。 - Nikhil
3个回答

4

您可以在map()内使用find()来查找元素。即使这些元素在两个数组中的索引不同,它也能找到该元素。

然后使用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);


1
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

你可以在内部使用条件来使用 map 函数

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)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接