@WorlDIk

Как найти элементы, встречающиеся только в одном из двух массивов?

Есть два массива: [1, 3, 3, 4, 6, 5, 4] и [6, 3, 5, 2, 2].
Разницу этих массивов надо передать в новый массив, чтобы выглядело следующим образом: [1, 2, 4].
Я попробовал

function arr_diff (a1, a2) {

    var a = [], diff = [];

    for (var i = 0; i < a1.length; i++) {
        a[a1[i]] = true;
    }

    for (var i = 0; i < a2.length; i++) {
        if (a[a2[i]]) {
            delete a[a2[i]];
        } else {
            a[a2[i]] = true;
        }
    }

    for (var k in a) {
        diff.push(k);
    }

    return diff;
}

Но из-за того, что во втором массиве 2 повторяется, новый массив выглядит как [1,4].
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const diff = (...arrs) => Array
  .from(arrs
    .flatMap(n => [...new Set(n)])
    .reduce((acc, n) => acc.set(n, acc.has(n)), new Map))
  .reduce((acc, n) => (n[1] || acc.push(n[0]), acc), []);


const arr = diff(arr1, arr2);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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