Как сравнить два массива и вывести расхождения?

Есть два массива со строковыми данными. Нужно сравнить их между собой и вывести в третий массив данные массива А, отсутствующие в массиве B. Как это сделать?
  • Вопрос задан
  • 18325 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const a = [ 'a', 'b', 'c', 'd' ];
const b = [ 'a', 'b', 'x', 'y', 'z' ];

const c = a.filter(n => b.indexOf(n) === -1);
// или
const c = a.filter(n => !b.includes(n));

Или, можно решить задачу в более общем виде. Пусть в качестве источников данных выступают не только массивы, а любые массивоподобные объекты; их элементы не обязательно являются примитивными значениями; а под равенством может подразумеваться не непосредственное равенство, а равенство некоторых производных значений:

function diff(data1, data2, key = n => n) {
  const getKey = key instanceof Function ? key : n => n[key];
  const keys = new Set(Array.from(data2, getKey));
  return Array.prototype.filter.call(data1, n => !keys.has(getKey(n)));
}


diff([1, 2, 3], [2]) // [1, 3]
diff([{id: 1}, {id: 2}, {id: 3}], [{id: 1}, {id: 3}], 'id') // [{id: 2}]
diff('AbCdE', 'aBc', n => n.toLowerCase()) // ['d', 'E']
Ответ написан
Krasnodar_etc
@Krasnodar_etc
fundraiseup
// a, b - массивы ваши
var result = [];
a.forEach( function (element) {
    if ( !~b.indexOf(element) ) result.push(element)
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Создаем пустой массив C.
Обходим массив А. Для каждого элемента проверяем (Array#includes или Array#indexOf === -1, смотря что доступно), есть ли такой элемент в массиве B. Если нет, то кладем этот элемент в массив C (Array.push).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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