Как вычесть массив из массива 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]
0 0
Аватар пользователя Aleksey
Aleksey
15 марта 2023

Вычитание массива из другого массива в буквальном смысле (как математическая операция) не совсем корректная операция. Обращаясь ко всему массиву мы получаем ссылку в памяти, где хранится данный массив.

[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]); // корректная операция

Другие, более сложные случаи вычитания элементов двух массивов зависят от задачи и могут решаться по-разному.

0 0
Добавьте ваш ответ

Рекомендуемые курсы

классы
инкапсуляция
контекст
прототипы
15 часов
Посмотреть
Алгоритмы сортировки
Структуры данных
Бинарный поиск
Жадные алгоритмы
11 часов
Посмотреть
состояние
JSX
компоненты
производительность
26 часов
Посмотреть