Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.03.2020, 13:29
Профессор
Отправить личное сообщение для _marisha Посмотреть профиль Найти все сообщения от _marisha
 
Регистрация: 18.05.2018
Сообщений: 170

Удаление элементов массива у другого массива
Доброго времени суток!
Необходимо произвести удаление элементов из первого массива, которые находятся во втором массиве.
Есть первый массив, которые содержит 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()?
Ответить с цитированием
  #2 (permalink)  
Старый 27.03.2020, 13:49
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от _marisha
Подскажите, пожалуйста, как из activeFavoriteID удалить activeFavoriteIDRemove ?
Можно ли сделать удаление с помощью filter()?
Тут есть куча вариантов...
https://www.cyberforum.ru/nodejs/thread2438814.html
Или вот...
https://fooobar.com/questions/68475/...-another-array
Ответить с цитированием
  #3 (permalink)  
Старый 27.03.2020, 13:52
Профессор
Отправить личное сообщение для _marisha Посмотреть профиль Найти все сообщения от _marisha
 
Регистрация: 18.05.2018
Сообщений: 170

Спасибо большое на наводку.
Буду пробовать )
Ответить с цитированием
  #4 (permalink)  
Старый 27.03.2020, 13:58
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Можно и фильтровать
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);
                    }
                }
Ответить с цитированием
  #5 (permalink)  
Старый 27.03.2020, 14:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

_marisha,

favorite  = document.querySelectorAll(".activeFavorite:not('.remove')")
Ответить с цитированием
  #6 (permalink)  
Старый 30.03.2020, 13:13
Профессор
Отправить личное сообщение для _marisha Посмотреть профиль Найти все сообщения от _marisha
 
Регистрация: 18.05.2018
Сообщений: 170

Сообщение от ksa Посмотреть сообщение
Тут есть куча вариантов...
https://www.cyberforum.ru/nodejs/thread2438814.html
Или вот...
https://fooobar.com/questions/68475/...-another-array
На данный момент сделано так:
activeFavoriteID = activeFavoriteID.filter( ( el ) => !activeFavoriteIDRemove.includes( el ) );
Ответить с цитированием
  #7 (permalink)  
Старый 30.03.2020, 13:15
Профессор
Отправить личное сообщение для _marisha Посмотреть профиль Найти все сообщения от _marisha
 
Регистрация: 18.05.2018
Сообщений: 170

Сообщение от voraa Посмотреть сообщение
А откуда дубли?
Дубли судя по всему от того, что на странице могут повторяться товары.
Т.е. есть список товаров и (к примеру) недавно просмотренные товары.
Теперь думаю, стоит ли вообще с дублями бороться
Ответить с цитированием
  #8 (permalink)  
Старый 30.03.2020, 20:34
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

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

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

Последний раз редактировалось voraa, 30.03.2020 в 20:39.
Ответить с цитированием
  #9 (permalink)  
Старый 31.03.2020, 07:19
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление больше одного повторяющихся элементов массива Katy93 Общие вопросы Javascript 0 23.02.2019 10:25
Удаление элементов из массива Noin Javascript под браузер 3 18.07.2015 17:37
Массив из элементов другого массива, взятых в случайном порядке Basil_JS Общие вопросы Javascript 6 12.04.2015 13:07
Удаление одинаковых элементов массива Ваяс Events/DOM/Window 57 20.02.2014 15:31
Сортировка массива по возрастанию другого массива. vas88811 Events/DOM/Window 4 12.01.2014 10:31