Задать вопрос
@TheBott

Как отфильтровать массив объектов по значениям другого массива?

Как отфильтровать массив объектов по значениям другого массива?

const arr = [1,3,5];
  const arrWithObj = [
   {id: 1,name: 'test', age: 25},
   {id: 2,name: 'test', age: 26},
   {id: 3,name: 'test', age: 26},
   {id: 4,name: 'test', age: 26},
   {id: 5,name: 'test', age: 26},
   {id: 6,name: 'test', age: 27},
   {id: 7,name: 'test', age: 27},
  ]

Нужно отфильтровать массив arrWithObj по ключу id, которые записаны в массиве arr. Т.е новый массив объектов должен быть без тех id которые описаны в массиве arr.
  • Вопрос задан
  • 464 просмотра
Подписаться 2 Простой 2 комментария
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const result = [];
for (const n of arrWithObj) {
  if (!arr.includes(n.id)) {
    result.push(n);
  }
}

или

const result = arrWithObj.filter(function(n) {
  return !this.has(n.id);
}, new Set(arr));

или

const result = (function get(i, n = arrWithObj[i]) {
  return n
    ? [].concat(~arr.indexOf(n.id) ? [] : n, get(-~i))
    : [];
})(0);

или

const result = Object.values(arr.reduce(
  (acc, n) => (delete acc[n], acc),
  Object.fromEntries(arrWithObj.map(n => [ n.id, n ]))
));

или

const result = Array.from(arr.reduce(
  (acc, n) => (acc.delete(n), acc),
  new Map(arrWithObj.map(n => [ n.id, n ]))
).values());
Ответ написан
Seanyr
@Seanyr
let filtered = arrWithObj.filter(x => !arr.includes(x.id));

Но если важна совместимость с IE ниже 9 версии, то лучше перебором
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы