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

Как отфильтровать массив, вернуть, то, что не совпало?

Есть два массива:
const arr1 = [
    {
        id: '1',
        title: 'one'
    },
    {
        id: '2',
        title: 'two'
    },
    {
        id: '3',
        title: 'three'
    },
    {
        id: '10',
        title: 'ten'
    }
]

const arr2 = [
    {
        id: '1',
        title: 'one'
    },
    {
        id: '10',
        title: 'ten'
    }
]

Подскажите, пожалуйста, как правильно отфильтровать. Логика такая, в arr2 объекты с id 1 и 10. arr2 содержит объекты с id 1 и 10, нужно вернуть объекты с id 2 и 3
  • Вопрос задан
  • 210 просмотров
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
function diff(data1, data2, compare = (a, b) => a === b) {
  const arr = Array.isArray(data2) ? data2 : [...data2];
  const result = [];

  for (const n of data1) {
    if (!arr.some(m => compare(m, n))) {
      result.push(n);
    }
  }

  return result;
}

const result = diff(arr1, arr2, (a, b) => a.id === b.id);

или

function* diff(data1, data2, key = n => n) {
  const getKey = key instanceof Function ? key : n => n[key];
  const keys = new Set(Array.from(data2, getKey));

  for (const n of data1) {
    if (!keys.has(getKey(n))) {
      yield n;
    }
  }
}

const result = [...diff(arr1, arr2, 'id')];
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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