Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript &引用;“搜索并销毁”;迭代不';t不要一次删除所有项目_Javascript - Fatal编程技术网

Javascript &引用;“搜索并销毁”;迭代不';t不要一次删除所有项目

Javascript &引用;“搜索并销毁”;迭代不';t不要一次删除所有项目,javascript,Javascript,我用这段代码迭代数组,并删除所有属性completed等于true的对象。当我使用这段代码执行函数时,它不会删除所有项。它会删除一个,或者有时是其中的一半,然后我需要按几次按钮来删除它们,而不是只删除一次。为什么会发生这种情况?我该如何解决 var toDoItems = $scope.toDoItems; for (var i = 0; i < toDoItems.length; i++) if (toDoItems[i].completed === true)

我用这段代码迭代数组,并删除所有属性
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)
var toDoItems=$scope.toDoItems;
for(var i=0;i
执行拼接操作后,请执行
i--
以减少计数器,因为
toDoItems。长度已减少,下一项的
i
应保持不变

for (var i = 0; i < toDoItems.length; i++)
{
    if (toDoItems[i].completed === true)
    {
      toDoItems.splice(i, 1)
      i--;
    }
}
for(var i=0;i
执行拼接操作后,请执行
i--
以减少计数器,因为
toDoItems。长度已减少,下一项的
i
应保持不变

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

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

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)

从末尾开始,向后迭代。这样,您的列表索引不会因为项目的删除而更改。您正在尝试在数组上循环时从数组中删除元素。这将改变尚未出现的列表索引。从末尾开始并向后迭代。这样,您的列表索引不会因为项目的删除而更改。您正在尝试在数组上循环时从数组中删除元素。这将改变尚未出现的列表索引。是的,我同意这两个都是很好的解决方案,但是另一个答案是最接近我的具体问题的解决方案。谢谢。嗯,我认为内置过滤函数比其他解决方案更干净,无论是将项目推入新数组还是减少索引等。我同意它更干净,可能更好,但对于其他代码,我只需添加一行代码。是的,我同意这两个都是非常好的解决方案,然而,另一个答案是最接近我的具体问题的解决方案。谢谢。嗯,我认为内置过滤函数比其他解决方案更干净,无论是将项目推入新数组还是减少索引等。我同意它更干净,可能更好,但对于其他代码,我只需添加一行代码。