Как вычесть массив из массива 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 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

Есть что добавить? Зарегистрируйтесь

или войдите в аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Курсы по программированию в Хекслете

Программирование

Веб-разработка

Разработка, верстка и деплой сайтов и веб-приложений, трудоустройство для разработчиков

Frontend-разработка

Разработка внешнего интерфейса сайтов и веб-приложений и верстка

Создание сайтов

Разработка сайтов и веб-приложений на JS, Python, Java, PHP и Ruby on Rails

Backend-разработка

Разработка серверной части сайтов и веб-приложений

Тестирование

Ручное тестирование и автоматизированное тестирование на JS, Python, Java и PHP

Аналитика данных

Сбор, анализ и интерпретация данных на Python

Интенсивные курсы

Интенсивное обучение для продолжающих

DevOps

Автоматизация настройки локального окружения и серверов, развертывания и деплоя

Математика для программистов

Обучение разделам математики, которые будут полезны при изучении программирования

JavaScript

Разработка сайтов и веб-приложений и автоматизированное тестирование на JS

Тест-драйв

Python

Веб-разработка, автоматическое тестирование и аналитика данных на Python

Java

Веб-разработка и автоматическое тестирование на Java

PHP

Веб-разработка и автоматическое тестирование на PHP

Ruby

Разработка сайтов и веб-приложений на Ruby on Rails

Go

Курсы по веб-разработке на языке Go

Верстка

HTML

Современная верстка с помощью HTML и CSS

SQL

Проектирование базы данных, выполнение SQL-запросов и изучение реляционных СУБД

Git

Система управления версиями Git, регулярные выражения и основы командой строки

Бесплатные курсы

Бесплатные курсы по тестированию, дата-аналитике, верстке, программированию на Python, Java, PHP и JavaScript.

Базы данных

Фреймворки