【问题标题】:How to delete multiple selected items from array at once in javascript如何在javascript中一次从数组中删除多个选定项目
【发布时间】: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


【解决方案1】:

您可以使用类似 Array filter 的方法吗?您可以将其与 Set 对象结合使用。

您可以通过数组元素或索引来完成。

const myArr = ['a', 'b', 'c', 'd', 'e'];

// By element
const toRemove = new Set(['a', 'c', 'e']);
const filtered = myArr.filter(el => !toRemove.has(el));
console.log(filtered);

// By index
const toRemoveIndex = new Set([0, 2, 4]);
const filteredByIndex = myArr.filter((_, i) => !toRemoveIndex.has(i));

console.log(filteredByIndex);

【讨论】:

    猜你喜欢
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    相关资源
    最近更新 更多