Отфильтровать раздел объекта, к которому прикреплена кнопка

#javascript #html #arrays #filter

#javascript #HTML #массивы #Фильтр

Вопрос:

У меня возникли проблемы с фильтрацией объектов в массиве. Код, который я получаю при нажатии одной кнопки на весь массив, фильтруется. Я хочу, чтобы там, где я щелкнул, этот объект был удален из массива. Я пробовал методы сращивания и фильтрации, но в итоге получаю те же результаты, что и весь массив, который удаляется вместо этого одного элемента. Как я могу настроить таргетинг только на этот один элемент?

 function removeItem(btns, id) {

    btns.forEach(btn => {
        btn.addEventListener('click', (e) => {

            let newArr = shoppingList.filter((item, i) => {
                return item.id !== item.id
            })

            shoppingList = newArr
            cartMenuItems.innerHTML = newArr
            cartItemCount.innerText = newArr.length
            return newArr
        })
    })
}
 

Комментарии:

1. Вы сравниваете item.id его с самим собой, и, поскольку они никогда не будут равны, он всегда возвращается false . Я предполагаю, что вы действительно хотите сравнить button.id (или другой соответствующий атрибут) к item.id вместо этого.

2. @pilchard Привет, пилчард. Он по-прежнему делает то же самое, если я сравниваю его с чем-то другим. Он удаляет весь массив или возвращает исходный массив.

Ответ №1:

вы должны получить идентификатор элемента из события щелчка, а затем получить новый массив с помощью map ()

 let element = e.target //for example
let newArr = shoppingList.map((item, i) => {
            if (item.id === element.id) continue
            return item
        })
 

этот код возвращает весь массив и прерывает ваш элемент со страницы