Javascript:将过滤数组推送到现有数组

Javascript: Push Filtered Array to Existing Array

本文关键字:数组 过滤 Javascript      更新时间:2023-09-26

我有一个小的待办事项应用程序:http://jsfiddle.net/ccLm46sn/

两个数组,一个包含已完成的任务,另一个包含已归档的任务。

每当我执行函数 archiivecompleted 时,我希望所有完成的任务都被推送到包含存档任务的数组中,然后删除完成的数组。

像这样:

this.tasks.archived.push({
    this.tasks.current.filter(function(task) {
        return task.completed;
    });
}); 

但它不工作。

这里工作得很好,用完整的数组覆盖归档数组:

this.tasks.archived = this.tasks.current.filter(function(task) {
    return task.completed;
});

但我不想覆盖归档数组,只是把它推入:

这里是小提琴:http://jsfiddle.net/ccLm46sn/

使用concat将已归档的任务与已完成的任务合并。

// assigns to the archived object the completed tasks object
var completedTasks = this.tasks.current.filter(function(task) {
    return task.completed;
});
this.tasks.archived = this.tasks.archived.concat(completedTasks);
工作小提琴

你可以这样修改你的函数:

this.tasks.archived.push.apply(this.tasks.archived,
this.tasks.current.filter(function(task) {
    return task.completed;
}));

.apply用于组合数组,这里是一个工作小提琴

可能像这样:

this.tasks.archived = this.tasks.archived.concat(this.tasks.current.filter(function(task) {
            return task.completed;
        }));

这是我在你的函数中修改的部分:

var completed_tasks = this.tasks.current.filter(function(task) {
    return task.completed;
});
for (var i = 0; i < completed_tasks.length; i++) {
    this.tasks.archived.push(completed_tasks[i]);
}

它似乎有效。下面是更新后的JSFiddle: http://jsfiddle.net/ccLm46sn/1/

我不知道这是否是最好的、最优雅的解决方案,但就我所测试的而言,它是有效的。