javascript - 如何让所有已完成的任务在函数调用时清除?

标签 javascript angularjs

我在 Angular 中工作,我有切换 bool 值的复选框(表示任务完成)。我还有两个数组,一个保存对象列表,另一个保存完成和清除后的第一个键值。

$scope.taskList = [{
  complete: false,
  foo: "1",
  bar: "2",
  baz: "3"
}];

$scope.completedTasks = [];

当只有一个或两个被选中时,下面的函数可以正常工作以清除任务;但是,当检查的项目数量增加时,只有一部分检查的项目会被清除;如果你一直调用这个函数,最终所有的任务都会被清除,但我不知道如何一举清除整个列表。

$scope.clearComplete = function() {
  for (var i = 0; i < $scope.taskList.length; i++) {
    if ($scope.taskList[i].complete == true) {
      $scope.completedTasks.push($scope.taskList[i].foo);
      $scope.taskList.splice(i, 1);
    }
  }
  console.log($scope.completedTasks);
  return $scope.taskList;
};

我不知道如何纠正逻辑,希望一些新鲜的眼光能够帮助我。

对于这个项目,我试图在没有 Underscore 和 Lodash 等其他辅助库帮助的情况下保持较低的依赖性。

最佳答案

首先,如果您正在执行 taskList.splic,则向后循环。 否则你可以这样做:

var incompleteTasks = [];
$scope.tasks.forEach(function(task){
    if(task.complete) {
        $scope.completedTasks.push(task.foo);
    } else {
        incompleteTasks.push(task);
    }
});
$scope.tasks = incompleteTasks;

因此,您将只迭代一次数组,并以非常简洁的方法实现它。

关于javascript - 如何让所有已完成的任务在函数调用时清除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45090507/

相关文章:

javascript - 从 AngularJs 中的外部站点加载 iframe 中的特定 div

javascript - 如何将 $.deferred 与不可观察的函数一起正确使用?

javascript - 如何使用javascript将div内容替换为 "html content"?

javascript - 我可以使用哪些工具来构建钻取图?

angularjs - 首次单击文本框时如何显示自动完成下拉菜单?

javascript - 如何将变量值从一个 Controller 传递到另一个 Controller ?

javascript - 在文本输入中输入代码时更改 Iframe YouTube 视频

php - PHP 中的特殊字符(如 omega 和 beta)字符串匹配

javascript - Angularjs - 如何 'ng-repeat' 'value in ng-model' 次 div?

javascript - 按按钮从数组中删除项目