Как найти разницу между двумя массивами
Короткий ответ
Оставьте элементы первого массива, которых нет во втором:
const all = ['a', 'b', 'c', 'd'];
const done = ['b', 'd'];
console.log(all.filter((item) => !done.includes(item)).join(', '));Результат:
a, cТолько в одном из массивов
Симметричная разность — элементы, которые есть только в одном из двух массивов:
const a = [1, 2, 3];
const b = [2, 3, 4];
const diff = [...a.filter((x) => !b.includes(x)), ...b.filter((x) => !a.includes(x))];
console.log(diff.join(', '));Результат:
1, 4Методы Set
У множеств есть готовые методы difference() и symmetricDifference():
const a = new Set([1, 2, 3]);
const b = new Set([2, 3, 4]);
console.log([...a.difference(b)].join(', '));
console.log([...a.symmetricDifference(b)].join(', '));Результат:
1
1, 4Что добавилось и что удалилось
Сравнение старого и нового списка даёт оба изменения:
const before = ['anna', 'oleg', 'ivan'];
const after = ['anna', 'ivan', 'maria'];
console.log('added:', after.filter((x) => !before.includes(x)).join(', '));
console.log('removed:', before.filter((x) => !after.includes(x)).join(', '));Результат:
added: maria
removed: olegЧастая ошибка
Порядок аргументов важен: разность a и b — не то же самое, что разность b и a:
const a = [1, 2, 3];
const b = [2, 3, 4];
console.log(a.filter((x) => !b.includes(x)).join(), b.filter((x) => !a.includes(x)).join());Результат:
1 4Функции из этого ответа
- Array.prototype.filter — Создаёт новый массив из элементов, прошедших проверку.
- Array.prototype.includes — Проверяет, есть ли значение в массиве.
- Set — Коллекция уникальных значений.