Javascript 如何在es6中获得匹配的第二个对象数组
我有两个对象数组:-更好的解决方案Javascript 如何在es6中获得匹配的第二个对象数组,javascript,typescript,ecmascript-6,es6-promise,ecmascript-5,Javascript,Typescript,Ecmascript 6,Es6 Promise,Ecmascript 5,我有两个对象数组:-更好的解决方案 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匹配,则表示使用第二个数组名 在上面的示例中,ID2匹配,我们需要id:2,名称:panasonics o/p: 可以使用下面
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匹配,则表示使用第二个数组名
在上面的示例中,ID2匹配,我们需要id:2,名称:panasonics
o/p:
可以使用下面这样的简单循环(如果需要,也可以使用for
循环,但是.forEach()
更简单)
此代码循环通过array1
,并循环通过该循环中的array2
。然后检查ID是否相同。如果有,名称将附加到结果
const array1=[{id:1,名称:“三星”},{id:2,名称:“诺基亚”},{id:3,名称:“Lg”}];
const-array2=[{id:5,名称:“三星”},{id:2,名称:“panasonics”},{id:7,名称:“Lg”}];
让结果=[];
数组1.forEach(e1=>{
array2.forEach(e2=>{
if(e1.id==e2.id){
result.push(e2.name);
}
});
});
控制台日志(结果)代码>使用Array.concat()
组合数组,通过id
将它们缩减为一个映射,然后使用Array.from()
将映射的值转换为一个数组:
const unionBy=(字段,…数组)=>Array.from(
[].concat(…阵列)
.reduce((r,o)=>r.set(o.id,o),新映射)
.values()
);
const array1=[{id:1,名称:“三星”},{id:2,名称:“诺基亚”},{id:3,名称:“Lg”}];
const-array2=[{id:5,名称:“三星”},{id:2,名称:“panasonics”},{id:7,名称:“Lg”}];
const result=unionBy('id',array1,array2);
控制台日志(结果)代码>像下面的代码一样使用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);
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);