Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Удаление элементов массива у другого массива (https://javascript.ru/forum/misc/79801-udalenie-ehlementov-massiva-u-drugogo-massiva.html)

_marisha 27.03.2020 13:29

Удаление элементов массива у другого массива
 
Доброго времени суток!
Необходимо произвести удаление элементов из первого массива, которые находятся во втором массиве.
Есть первый массив, которые содержит ID товаров, которые выделены.
const favorite = document.getElementsByClassName('activeFavorite');

                for (inp of favorite) {
                    if (inp.getElementsByClassName('activeFavorite')) {
                        activeFavoriteID.push(inp.id);
                        for (var i = activeFavoriteID.length - 1; i >= 0; i--)//удаление дублей
                        {
                            if (activeFavoriteID.indexOf(activeFavoriteID[i]) != i)
                                activeFavoriteID.splice(i, 1);
                        }
                    }
                }

Есть второй массив, который содержит ID товаров, у которых было снято выделение:
const favoriteRemove = document.getElementsByClassName('remove');
                for (inp of favoriteRemove)
                {
                    if (inp.getElementsByClassName('remove'))
                    {
                        activeFavoriteIDRemove.push(inp.id);//удаленные
                        for (var i = activeFavoriteIDRemove.length - 1; i >= 0; i--)//удаление дублей
                        {
                            if (activeFavoriteIDRemove.indexOf(activeFavoriteIDRemove[i]) != i)
                                activeFavoriteIDRemove.splice(i, 1);
                        }
                    }
                }

Подскажите, пожалуйста, как из activeFavoriteID удалить activeFavoriteIDRemove ?
Можно ли сделать удаление с помощью filter()?

ksa 27.03.2020 13:49

Цитата:

Сообщение от _marisha
Подскажите, пожалуйста, как из activeFavoriteID удалить activeFavoriteIDRemove ?
Можно ли сделать удаление с помощью filter()?

Тут есть куча вариантов...
https://www.cyberforum.ru/nodejs/thread2438814.html
Или вот...
https://fooobar.com/questions/68475/...-another-array

_marisha 27.03.2020 13:52

Спасибо большое на наводку.
Буду пробовать )

voraa 27.03.2020 13:58

Можно и фильтровать
res = activeFavoriteID.filter (id => activeFavoriteIDRemove.indexOf(id) == -1)

for (inp of favorite) {
                    if (inp.getElementsByClassName('activeFavorite')) {
                        activeFavoriteID.push(inp.id);
                        for (var i = activeFavoriteID.length - 1; i >= 0; i--)//удаление дублей
                        {
                            if (activeFavoriteID.indexOf(activeFavoriteID[i]) != i)
                                activeFavoriteID.splice(i, 1);
                        }
                    }
                }


А откуда дубли?
Может сразу делать, что бы не было дублей
for (inp of favorite) {
                    if (inp.getElementsByClassName('activeFavorite')) {
                        if (activeFavoriteID.indexOf(inp.id) == -1) activeFavoriteID.push(inp.id);
                    }
                }

рони 27.03.2020 14:18

_marisha,
:-?
favorite  = document.querySelectorAll(".activeFavorite:not('.remove')")

_marisha 30.03.2020 13:13

Цитата:

Сообщение от ksa (Сообщение 521818)

На данный момент сделано так:
activeFavoriteID = activeFavoriteID.filter( ( el ) => !activeFavoriteIDRemove.includes( el ) );

_marisha 30.03.2020 13:15

Цитата:

Сообщение от voraa (Сообщение 521820)
А откуда дубли?

Дубли судя по всему от того, что на странице могут повторяться товары.
Т.е. есть список товаров и (к примеру) недавно просмотренные товары.
Теперь думаю, стоит ли вообще с дублями бороться :-?

voraa 30.03.2020 20:34

Цитата:

Сообщение от _marisha (Сообщение 521915)
Дубли судя по всему от того, что на странице могут повторяться товары.
Т.е. есть список товаров и (к примеру) недавно просмотренные товары.
Теперь думаю, стоит ли вообще с дублями бороться :-?

Вы делаете
activeFavoriteID.push(inp.id);
Все идентификаторы (id=...) на странице должны быть уникальны.
Дубли могут быть, если только вы дважды отправляете в массив идентификатор одного и того же элемента.

activeFavoriteID = activeFavoriteID.filter( ( el ) => !activeFavoriteIDRemove.includes( el ) );
В этом случае, если в activeFavoriteID были дубли до фильтрации, то они там могут и остаться, если не входят в удаляемые..

laimas 31.03.2020 07:19

Цитата:

Сообщение от _marisha
Т.е. есть список товаров и (к примеру) недавно просмотренные товары.

Трудно представить список товаров, в котором все в куче. Список товаров, например категории, на странице, это одна область, а недавно просмотренные, рекомендуемые и прочие, это иные области на странице.

Но даже если выбирать из разных областей один и тот же товар на дубликаты можно не обращать внимания, если передавать серверу информацию о товаре под id товара как первичным ключом. Массив не может содержать дубликаты ключей и никаких дубликатов на сервере не будет.


Часовой пояс GMT +3, время: 23:21.