Задать вопрос
@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
  • Вопрос задан
  • 192 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
function diff(data1, data2, key = n => n) {
  const getKey = key instanceof Function ? key : n => n[key];
  const keys = new Set(Array.from(data2, getKey));
  const result = [];

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

  return result;
}

// ваш случай
const result = diff(arr1, arr2, 'id');

// есть и другие варианты использования
diff(Array(10).keys(), Array(7).keys()) // [ 7, 8, 9 ]
diff('ABCDE', 'ace', n => n.toLowerCase()) // [ 'B', 'D' ]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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