Как найти различие между двумя массивами в JavaScript?

Привет! У меня есть два массива, и мне нужно определить, какие элементы присутствуют в одном, но отсутствуют в другом. Не знаю, как правильно это реализовать.

Например, вот что у меня есть:

let первыйМассив = ['яблоко', 'банан'];
let второйМассив = ['яблоко', 'банан', 'вишня', 'финик'];

// хочу получить ["вишня", "финик"]

Пробовал разные подходы, но не получается достичь нужного результата. Есть ли какой-то простой способ или встроенный метод? Буду признателен за помощь!

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

let результат = [];
for (let i = 0; i < второйМассив.length; i++) {
    if (первыйМассив.indexOf(второйМассив[i]) === -1) {
        результат.push(второйМассив[i]);
    }
}

не самый красивый способ, но всё понятно и работает. indexOf даёт -1 если элемента нет, так что условие срабатывает как надо.

Используй метод filter(). Он создаст новый массив только из элементов, которых нет в первом массиве:

let разность = второйМассив.filter(item => !первыйМассив.includes(item));

Получишь [“вишня”, “финик”]. На малых массивах работает отлично, но для больших данных лучше использовать Set - будет быстрее.

А если нужна разность в обе стороны? Вот функция покажет, что есть в одном, но нет в другом и наоборот:

function разностьМассивов(arr1, arr2) {
    return arr1.filter(x => !arr2.includes(x)).concat(arr2.filter(x => !arr1.includes(x)));
}

Так увидишь все уникальные элементы сразу. Какой именно случай нужен?