【发布时间】:2019-11-17 21:25:52
【问题描述】:
我正在开发一个待办事项列表应用程序。我正在尝试添加的一项功能是清除选定的项目,这些项目将从数组中删除复选框中选中的项目。
我正在运行一个事件侦听器,当单击“清除选定”按钮时,它将运行一个删除从数组中选择的项目的函数。
我正在尝试使用以下代码:
clearSelect.addEventListener("click", function() {
if (checkBox.checked == true) {
liAdd.remove();
removeSelectedItems(userInput);
function removeSelectedItems(selected) {
let selectedItems = toDoArray.indexOf(selected);
toDoArray.splice(selectedItems, 1);
console.log(toDoArray);
}
}
saveToLocalStorage(); });
起初它工作正常,如果我输入 10 个项目,然后一次选择并删除 3-4 个 - 项目的索引与它们在数组中的位置匹配,它们删除得很好。但是,如果我然后再选择 3-4 并再次删除,则数组项的索引都是扭曲的,弹出为 -1 和 0。然后我会奇怪地在刷新后得到一个空数组。我尝试添加一个 if (selected != -1) 来停止数组项显示为 -1 索引 # 但这不起作用。
感谢任何帮助,谢谢!
【问题讨论】:
-
你熟悉
Array.filter()吗?您可以使用它来创建一个新数组,只需过滤掉与给定条件匹配的数组。无需担心索引或其他任何事情,它只是填充并返回一个全新的数组。这里的问题是,当您将数组用作突变的基础时,您正在尝试对其进行突变 - 就像站在树枝上试图切断树枝一样。
标签: javascript arrays loops indexof