Отфильтруйте два массива объектов и получите результирующий массив - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь проверить условие, при котором carId в одном массиве равно id в другом массиве.

Ниже приведен фрагмент кода.

const arr1 = [{
    id: '1',
    type: 'car',
    name: 'BMW',
  },
  {
    id: '2',
    type: 'car',
    name: 'Audi',
  },
  {
    id: '3',
    type: 'car',
    name: 'Benz',
  }
];

const arr2 = [{
  carId: '1'
}, {
  carId: '3'
}];

const result = arr2.map(val => arr2.find(val.carId === id))
console.log(result)

Результат, которого я ожидаю, будет

[{
    id: '1',
    type: 'car',
    name: 'BMW',
  },
  {
    id: '3',
    type: 'car',
    name: 'Benz',
  }
];

Может ли кто-нибудь помочь?

Ответы [ 3 ]

2 голосов
/ 09 июля 2020

Хотя вы должны использовать .filter() на arr1 и передавать обратный вызов .find(), я бы, вероятно, сначала преобразовал arr2 в простой список идентификаторов и вместо этого использовал .includes().

const arr1 = [{
    id: '1',
    type: 'car',
    name: 'BMW',
  },
  {
    id: '2',
    type: 'car',
    name: 'Audi',
  },
  {
    id: '3',
    type: 'car',
    name: 'Benz',
  }
];

const arr2 = [{
  carId: '1'
}, {
  carId: '3'
}];

const ids = arr2.map(o => o.carId);

const result = arr1.filter(val => ids.includes(val.id))
console.log(result)

или еще лучше, преобразовать arr2 в Set.

const arr1 = [{
    id: '1',
    type: 'car',
    name: 'BMW',
  },
  {
    id: '2',
    type: 'car',
    name: 'Audi',
  },
  {
    id: '3',
    type: 'car',
    name: 'Benz',
  }
];

const arr2 = [{
  carId: '1'
}, {
  carId: '3'
}];

const ids = arr2.map(o => o.carId);
const idSet = new Set(ids);

const result = arr1.filter(val => idSet.has(val.id))
console.log(result)
1 голос
/ 09 июля 2020

const arr1 = [{
    id: '1',
    type: 'car',
    name: 'BMW',
  },
  {
    id: '2',
    type: 'car',
    name: 'Audi',
  },
  {
    id: '3',
    type: 'car',
    name: 'Benz',
  }
];

const arr2 = [{
  carId: '1'
}, {
  carId: '3'
}];

const result = arr1.filter(a1val => arr2.find(a2val => a2val.carId === a1val.id) !== undefined);
console.log(result);
0 голосов
/ 09 июля 2020

Это может сработать

const result = arr2.map(val => arr1.find(item => item.id === val.carId))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...