我在 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/