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

Есть два массива со строковыми данными. Нужно сравнить их между собой и вывести в третий массив данные массива А, отсутствующие в массиве B. Как это сделать?
  • Вопрос задан
  • 17986 просмотров
Решения вопроса 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));

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

const diff = (arr1, arr2, key = n => n) =>
  arr1.filter(function(n) {
    return !this.has(key(n));
  }, new Set(arr2.map(key)));


const a = [
  { id: 1 },
  { id: 2 },
  { id: 3 },
];

const b = [
  { id: 1 },
  { id: 3 },
];

const c = diff(a, b, n => n.id); // [{id: 2}]
Ответ написан
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).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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