Карта массив объектов на основе идентификатора - PullRequest
1 голос
/ 18 апреля 2020

Noob javascript энтузиастов здесь.

Я пытаюсь понять различные функции высшего порядка javascript, и мне особенно любопытны возможности .map () для массива объектов.

Предположим, у вас есть следующее:

selectedId = ['u1', 'u2']
data = [
{id: 'u1', color: 'red', age: '24'},
{id: 'u2', color: 'blue', age: '18'},
{id: 'u3', color: 'yellow', age: '15'}
]

Как бы вы go решили создать новый массив, содержащий только объекты u1 и u2? Т.е.:

selectedData = [
{id: 'u1', color: 'red', age: '24'},
{id: 'u2', color: 'blue', age: '18'},
]

Ответы [ 2 ]

3 голосов
/ 18 апреля 2020

Вам потребуется Array#map над вашим массивом selectedId, а затем найти соответствующий объект внутри data массива, используя Array#find.

const selectedId = ['u1', 'u2'];

const data = [
  {id: 'u1', color: 'red', age: '24'},
  {id: 'u2', color: 'blue', age: '18'},
  {id: 'u3', color: 'yellow', age: '15'}
];

const res = selectedId.map((id) => data.find((o) => o.id === id));

console.log(res);
1 голос
/ 18 апреля 2020

Если я правильно понимаю, вы можете использовать фильтр массива, как

data.filter(el => selectedId.includes(el.id));

даст

[
{id: 'u1', color: 'red', age: '24'},
{id: 'u2', color: 'blue', age: '18'}
]

Или, альтернативно,

selectedId.map((id) => data.find((el) => el.id === id));

даст

[
{id: 'u1', color: 'red', age: '24'},
{id: 'u2', color: 'blue', age: '18'}
]
...