Javascript: 将过滤后的数组推送到现有数组
Javascript: Push Filtered Array to Existing Array
我这里有一个小的待办事项应用程序:
http://jsfiddle.net/ccLm46sn/
两个数组,一个包含已完成的任务,另一个包含已归档的任务。
每当我执行函数 archiveCompleted 时,我希望将所有已完成的任务与存档任务一起推送到数组,然后删除已完成的数组。
像这样:
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;
});
但我不想覆盖存档数组,只是为了推入:
这里是fiddle: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);
工作fiddle
可能是这样的:
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/
我不知道这是否是最好和最优雅的解决方案,但据我测试它是有效的。
您可以这样更改函数:
this.tasks.archived.push.apply(this.tasks.archived,
this.tasks.current.filter(function(task) {
return task.completed;
}));
.apply
用于组合数组这里是一个有效的 fiddle
我这里有一个小的待办事项应用程序: http://jsfiddle.net/ccLm46sn/
两个数组,一个包含已完成的任务,另一个包含已归档的任务。
每当我执行函数 archiveCompleted 时,我希望将所有已完成的任务与存档任务一起推送到数组,然后删除已完成的数组。
像这样:
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;
});
但我不想覆盖存档数组,只是为了推入:
这里是fiddle: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);
工作fiddle
可能是这样的:
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/
我不知道这是否是最好和最优雅的解决方案,但据我测试它是有效的。
您可以这样更改函数:
this.tasks.archived.push.apply(this.tasks.archived,
this.tasks.current.filter(function(task) {
return task.completed;
}));
.apply
用于组合数组这里是一个有效的 fiddle