JS Как получить совпадающий идентификатор между двумя объектами массива - PullRequest
0 голосов
/ 03 февраля 2020

Как получить 2 совпадающих идентификатора между двумя объектами массива, используя javascript?

// Array 1
const array1 = [
  {id: 1, name: 'milla'},
  {id: 2, name: 'alice'}
]

// Array 2
const array2 = [
  {id: 3, name: 'bobba', height: '170cm', age: 22},
  {id: 2, name: 'alice', height: '169cm', age: 21},
  {id: 1, name: 'milla', height: '171cm', age: 24},
  {id: 4, name: 'ricky', height: '168cm', age: 32},
]

Ожидаемый результат - возвращаемый массив объекта Array2, сопоставленный с идентификаторами в массиве1

// expected result
[
  {id: 2, name: 'alice', height: '169cm', age: 21},
  {id: 1, name: 'milla', height: '171cm', age: 24},
]

Ответы [ 3 ]

0 голосов
/ 03 февраля 2020

Самый эффективный способ сделать это - сгенерировать карту идентификаторов в array1, а затем отфильтровать array2 по этим идентификаторам, например:

let array1 = [{ id: 1, name: 'milla' }, { id: 2, name: 'alice' }];
let array2 = [{ id: 3, name: 'bobba', height: '170cm', age: 22 }, { id: 2, name: 'alice', height: '169cm', age: 21 }, { id: 1, name: 'milla', height: '171cm', age: 24 }, { id: 4, name: 'ricky', height: '168cm', age: 32 }];

let idMap = array1.reduce((res, curr) => (res[curr.id] = true, res), {});
let filtered = array2.filter((item) => idMap[item.id]);

console.log(filtered)
0 голосов
/ 03 февраля 2020

Честно говоря, это основа c JS, но в любом случае вот решение:

const array1 = [
  {id: 1, name: 'milla'},
  {id: 2, name: 'alice'}
]

// Array 2
const array2 = [
  {id: 3, name: 'bobba', height: '170cm', age: 22},
  {id: 2, name: 'alice', height: '169cm', age: 21},
  {id: 1, name: 'milla', height: '171cm', age: 24},
  {id: 4, name: 'ricky', height: '168cm', age: 32},
]

const map = array1.reduce((a, c) => ({ ...a, [c.id]: true }), {});
const array3 = array2.filter(item => map[item.id]);

console.log(array3);
0 голосов
/ 03 февраля 2020

Вы можете отфильтровать и посмотреть, существует ли тот же id.

const
    array1 = [{ id: 1, name: 'milla' }, { id: 2, name: 'alice' }],
    array2 = [{ id: 3, name: 'bobba', height: '170cm', age: 22 }, { id: 2, name: 'alice', height: '169cm', age: 21 }, { id: 1, name: 'milla', height: '171cm', age: 24 }, { id: 4, name: 'ricky', height: '168cm', age: 32 }],
    hash = array1.reduce((r, { id }) => (r[id] = true, r), {}),
    filtered = array2.filter(({ id }) => hash[id]);

console.log(filtered);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...