如何在ES6中获取匹配的对象第二数组

时间:2019-03-17 21:53:24

标签: 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匹配,则表示采用第二个数组名称 在上面的示例中,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"}]

3 个答案:

答案 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);