"搜索并销毁“;迭代不会'不要一次删除所有项目

"Search and destroy" iteration doesn't delete all of the items at once

本文关键字:删除 项目 一次 搜索 quot 迭代      更新时间:2023-10-31

我有这段代码来遍历数组,并删除属性completed等于true的所有对象。当我用这个代码块执行函数时,它不会删除所有项目。它会删除其中一个,有时会删除一半,然后我需要按几次按钮才能删除所有内容,而不是只按一次。为什么会发生这种情况,我该如何解决?

  var toDoItems = $scope.toDoItems;
  for (var i = 0; i < toDoItems.length; i++)
    if (toDoItems[i].completed === true)
      toDoItems.splice(i, 1)
  ls.set('toDoData', toDoItems)

完成拼接后,执行i--以减少计数器,因为toDoItems.length已经减少,而i在下一项中应保持不变。

for (var i = 0; i < toDoItems.length; i++)
{
    if (toDoItems[i].completed === true)
    {
      toDoItems.splice(i, 1)
      i--;
    }
}

我能想到的另一种选择是,不删除已完成的项目,而是将未完成的项目推送到一个空数组中:

var toDoItems = [];
for (var i = 0; i < $scope.toDoItems.length; i++)
   if ($scope.toDoItems[i].completed !== true)
      toDoItems.push($scope.toDoItems[i]);
ls.set('toDoData', toDoItems)

或者,您可以使用Array.prototype.filter():

var toDoItems = $scope.toDoItems.filter(function (item) {
    return item.completed !== true;
});
ls.set('toDoData', toDoItems)