如何使用 JavaScript 中的循环从数组中删除多个特定元素?

问题描述

这是一个 DOM 元素数组,我想删除所有具有特定类的元素,在本例中为“checked-item”。我也想改变原始数组,所以我认为过滤方法是不可能的。

taskArr = [some DOM Elements]
taskArr.forEach(function (task) {
 if (task.children[1].className.includes("checked-Item")) {
   taskArr.splice(taskArr.indexOf(task),1);    
}
});

解决方法

当列表在迭代时发生变异时,可能会产生副作用。拼接可能会导致跳过后续项目。这就是像 filter 这样的不可变函数更容易推理的原因之一。

,

你的错误可能是因为你在循环内拼接元素,所以如果你控制台记录任务,不是每个都会在输出中。 我找到了一个没有 foreach 的解决方案:

taskArr = [some DOM Elements]
const length = taskArr.length;
var deleted = 0;
for(var i = 0; i < length; i ++){
     if(taskArr[i - deleted].children[1].className.includes("checked-Item")){
         taskArr.splice(i - deleted,1);
          deleted ++;
     }
}