#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
})
этот код возвращает весь массив и прерывает ваш элемент со страницы