@1233211

Как отфильтровать массив с объектами?

Есть массив вида
['1', `2`, `3`, `4`, `5`]
А так же есть массив c объектами такого вида
[
 {
    number: '3',
    name: 'Vasja',
 },
 {
    number: '5',
    name: 'Igor',
 }
]


Нужно в итоге получить массив такой
['1', `2`, `4`]

То есть массив со всеми номерами, с которыми нет объектов. Спасибо
  • Вопрос задан
  • 105 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
numbers.filter(n => !objects.some(m => m.number === n))

или

numbers.filter(function(n) {
  return !this.has(n);
}, new Set(objects.map(n => n.number)))

или

numbers.filter(((nums, n) => !nums.includes(n)).bind(null, objects.map(n => n.number)))


или

Object.values(objects.reduce(
  (acc, n) => (delete acc[n.number], acc),
  numbers.reduce((acc, n) => (acc[n] = n, acc), {})
))

или

Array.from(objects.reduce(
  (acc, n) => (acc.delete(n.number), acc),
  new Map(numbers.map(n => [ n, n ]))
).values())
Ответ написан
Комментировать
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
1. Свести многомерный массив к одномерному
2. Отфильтровать первый, проверяя наличие значений во втором.

let arr2_plain = arr2.map(item => item.number);
let result = arr1.filter(item => !arr2_plain.includes(item));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы