Как вычесть массив из массива js
Операция "вычитания" массива из массива сводится к перебору на наличие элементов первого массива во втором. Разность двух массивов даст нам элементы первого массива, которых нет во втором. Рассмотрим пример на плоских структурах. "Вычтем" из массива A массив B c помощью методов массивов - filter() и includes()
const arr_A = [1, 2, 3, 4, 5, 6, 7];
const arr_B = [5, 6, 7, 8, 9, 10];
const result = arr_A.filter(el_A => !arr_B.includes(el_A));
// Результат: [1, 2, 3, 4]
Более сложный пример, с вложенными структурами. Необходимо произвести вычитание, но только лишь по одному из ключей, например по полю name. Для этого удобно применить метод some().
const arr_A = [{name: 'Ivan', age: 32}, {name: 'Nikolay', age: 24}, {name: 'Anna', age: 24}];
const arr_B = [{name: 'Nikolay', age: 24}];
const result = arr_A.filter(person_A => !arr_B.some(person_B => person_A.name === person_B.name));
// Результат [ { name: 'Ivan', age: 32 }, { name: 'Anna', age: 24 } ]
Также можно воспользоваться методом из библиотеки Lodash - difference
_.difference([5, 2, 1], [2, 3]);
// Результат => [5, 1]
Вычитание массива из другого массива в буквальном смысле (как математическая операция) не совсем корректная операция. Обращаясь ко всему массиву мы получаем ссылку в памяти, где хранится данный массив.
[1, 2, 3] - [1, 2, 3]; // NaN
Мы получили NaN
(not a number) как результат операции вычитания. И это логично, ведь результат не представляет собой математически корректную операцию.
Однако, мы можем провести вычитание элементов этих массивов. Это просто, когда мы знаем точно о том, что хранится в этих массивах, сколько элементов содержит каждый.
const arrA = [100, 500];
const arrB = [101, 505];
console.log(arrA[0] - arrB[1]); // корректная операция
Другие, более сложные случаи вычитания элементов двух массивов зависят от задачи и могут решаться по-разному.