我有两个对象数组:-更好的解决方案
array1= [{id:1,name:"samsung"},{id:2,name:"nokia"},{id:3,name:"Lg"}];
array2 = [{id:5,name:"samsung"},{id:2,name:"panasonics"},{id:7,name:"Lg"}];
预期输出为: 如果第一个数组和第二个数组ID匹配,则表示采用第二个数组名称 在上面的示例中,id 2匹配,我们需要id:2,name:panasonics。
o / p:
[{id:1,name:"samsung"},{id:2,name:"panasonics"},{id:3,name:"Lg"},{id:5,name:"samsung"},{id:7,name:"Apple"}]
答案 0 :(得分:1)
使用Array.concat()
组合数组,将id
简化为Map,然后使用Array.from()
将Map的值转换为数组:
const unionBy = (field, ...arrays) => Array.from(
[].concat(...arrays)
.reduce((r, o) => r.set(o.id, o), new Map)
.values()
);
const array1 = [{id:1,name:"samsung"},{id:2,name:"nokia"},{id:3,name:"Lg"}];
const array2 = [{id:5,name:"samsung"},{id:2,name:"panasonics"},{id:7,name:"Lg"}];
const result = unionBy('id', array1, array2);
console.log(result);
答案 1 :(得分:0)
您可以使用如下所示的简单.forEach()
循环(如果需要,也可以使用for
循环,但是.forEach()
更容易)。
此代码循环array1
,并在该循环中循环array2
。然后,它检查ID是否相同。如果存在,则将名称附加到结果之后。
const array1= [{id:1,name:"samsung"},{id:2,name:"nokia"},{id:3,name:"Lg"}];
const array2 = [{id:5,name:"samsung"},{id:2,name:"panasonics"},{id:7,name:"Lg"}];
let result = [];
array1.forEach(e1 => {
array2.forEach(e2 => {
if (e1.id == e2.id) {
result.push(e2.name);
}
});
});
console.log(result);
答案 2 :(得分:0)
像下面的代码一样使用map()和concat()
array1= [{id:1,name:"samsung"},{id:2,name:"nokia"},{id:3,name:"Lg"}];
array2 = [{id:5,name:"samsung"}, {id:2,name:"panasonics"},{id:7,name:"Lg"}];
var array3=array1.map(function(i,v){
if(array2[v].id==i.id){
return array2[v]
}
else return i
})
array4=array3.concat(array2);
console.log(array4);