2 回答
TA贡献1835条经验 获得超7个赞
转换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)
TA贡献1840条经验 获得超5个赞
你可以这样做:
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 this
const 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 元素添加一个新属性,并将其作为新创建的数组的新元素返回。希望有所帮助,如果您需要,请在评论中要求澄清。
添加回答
举报