Сопоставление набора объектов в массиве на основе другого массива значений свойств поиска в Javascript - PullRequest
0 голосов
/ 17 сентября 2018

Есть ли лучший способ фильтрации массива объектов на основе набора возможных значений для конкретного свойства?

Это работает, но кажется немного неуклюжим.

const all = [
  {id: 1}, {id: 2}, {id: 3} ...
]
const ids = [2, 3];

const selected = (all, ids) =>
  all.filter(obj => ids.map(id => id === obj.id).some(match => match));

selected(all, ids);
// [{id: 2}, {id: 3}]

В Pythonэто было бы что-то вроде этого:

selected = [obj for obj in all if obj.id in ids]

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

Вы можете использовать Array.filter, object destructuration и Array.includes, например:

const all = [{
  id: 1,
}, {
  id: 2,
}, {
  id: 3,
}];

const ids = [
  2,
  3,
];

const selected = (all, ids) => all.filter(({
  id,
}) => ids.includes(id));

console.log(selected(all, ids));
// [{id: 2}, {id: 3}]
0 голосов
/ 17 сентября 2018

Вы можете взять Set для требуемого id и проверить на фильтрацию.

const
    all = [{ id: 1 }, { id: 2 }, { id: 3 }],
    ids = [2, 3],
    result = all.filter((s => ({ id }) => s.has(id))(new Set(ids)));

console.log(result);
0 голосов
/ 17 сентября 2018

Вы можете просто отфильтровать массив, используя Array.filter() и Array.includes():

const all = [ {id: 1}, {id: 2}, {id: 3} ];
const ids = [2, 3];

const selected = (all, ids) => all.filter(obj => ids.includes(obj.id));
  
console.log(selected(all,ids));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...