映射两个对象数组,匹配属性并将特定信息存储在新数组中
Map over two arrays of objects, match properties and store specific info in a new array
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 是否合适。
预先感谢您的帮助(很抱歉这可能是个骗局)!
您可以使用带有条件的地图
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)
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
}
})
您可以使用 find() inside 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);
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 是否合适。
预先感谢您的帮助(很抱歉这可能是个骗局)!
您可以使用带有条件的地图
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)
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
}
})
您可以使用 find() inside 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);