Как получить совпадающий второй массив объекта в es6 - PullRequest
0 голосов
/ 18 марта 2019

У меня есть два массива объектов: - лучшее решение

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"}];

Ожидаемый результат будет следующим: совпадение идентификатора первого массива и второго массива означает, что второе имя массива в приведенном выше примере совпадает с идентификатором 2, и нам нужен идентификатор: 2, имя: panasonics.

o / p:

 [{id:1,name:"samsung"},{id:2,name:"panasonics"},{id:3,name:"Lg"},{id:5,name:"samsung"},{id:7,name:"Apple"}]

Ответы [ 3 ]

1 голос
/ 18 марта 2019

Объедините массивы, используя Array.concat(), уменьшите их до карты на id, а затем преобразуйте значения карты в массив с Array.from():

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);
0 голосов
/ 18 марта 2019

Используйте 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);
0 голосов
/ 18 марта 2019

Вы можете использовать простой цикл .forEach(), как показано ниже (вы также можете использовать цикл for, если хотите, но .forEach() проще).

Этот код перебирает array1, и перебирает array2 в этом цикле. Затем он проверяет, совпадают ли идентификаторы. Если есть, то имя добавляется к результату.

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);
...