Javascript:将过滤后的数组推送到现有数组
我这里有一个小的待办事项应用程序: 两个阵列,一个包含已完成的任务,另一个包含已存档的任务 每当我执行函数archiveCompleted时,我都希望将所有已完成的任务与已存档的任务一起推送到阵列上,然后删除已完成的阵列 大概是这样的:Javascript:将过滤后的数组推送到现有数组,javascript,arrays,laravel,vue.js,Javascript,Arrays,Laravel,Vue.js,我这里有一个小的待办事项应用程序: 两个阵列,一个包含已完成的任务,另一个包含已存档的任务 每当我执行函数archiveCompleted时,我都希望将所有已完成的任务与已存档的任务一起推送到阵列上,然后删除已完成的阵列 大概是这样的: this.tasks.archived.push({ this.tasks.current.filter(function(task) { return task.completed; }); }); this.tasks.
this.tasks.archived.push({
this.tasks.current.filter(function(task) {
return task.completed;
});
});
this.tasks.archived = this.tasks.archived.concat(this.tasks.current.filter(function(task) {
return task.completed;
}));
this.tasks.archived.push.apply(this.tasks.archived,
this.tasks.current.filter(function(task) {
return task.completed;
}));
但它不起作用
通过使用已完成的阵列覆盖已存档阵列,此方法可以正常工作:
this.tasks.archived = this.tasks.current.filter(function(task) {
return task.completed;
});
但我不想覆盖已存档的阵列,我只是想强调一下:
这里是小提琴:使用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);
工作使用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({
this.tasks.current.filter(function(task) {
return task.completed;
});
});
this.tasks.archived = this.tasks.archived.concat(this.tasks.current.filter(function(task) {
return task.completed;
}));
this.tasks.archived.push.apply(this.tasks.archived,
this.tasks.current.filter(function(task) {
return task.completed;
}));
可能是这样的:
this.tasks.archived.push({
this.tasks.current.filter(function(task) {
return task.completed;
});
});
this.tasks.archived = this.tasks.archived.concat(this.tasks.current.filter(function(task) {
return task.completed;
}));
this.tasks.archived.push.apply(this.tasks.archived,
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]);
}
这似乎奏效了。以下是更新的JSFIDLE:
我不知道它是否是最好、最优雅的解决方案,但就我测试的结果而言,它是有效的。以下是我在您的函数中更改的部分:
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]);
}
这似乎奏效了。以下是更新的JSFIDLE:
我不知道它是否是最好、最优雅的解决方案,但就我测试的结果而言,它是有效的。您可以这样更改您的功能:
this.tasks.archived.push({
this.tasks.current.filter(function(task) {
return task.completed;
});
});
this.tasks.archived = this.tasks.archived.concat(this.tasks.current.filter(function(task) {
return task.completed;
}));
this.tasks.archived.push.apply(this.tasks.archived,
this.tasks.current.filter(function(task) {
return task.completed;
}));
.apply用于组合阵列。这是一个有效的您可以按如下方式更改功能:
this.tasks.archived.push({
this.tasks.current.filter(function(task) {
return task.completed;
});
});
this.tasks.archived = this.tasks.archived.concat(this.tasks.current.filter(function(task) {
return task.completed;
}));
this.tasks.archived.push.apply(this.tasks.archived,
this.tasks.current.filter(function(task) {
return task.completed;
}));
.apply用于组合数组这里是一个正在工作的如何-this.tasks.archived=this.tasks.archived.concatthis.tasks.current.filterfunctiontask{return task.completed;};它对我有用,请摆弄一下手推车code@TonyRaoulIscaros他的小提琴正在演奏。完成一项任务,将其存档,然后与另一项任务一起执行。第一个完成的任务将从存档的任务中消失。不,我是说推送方法正在工作,好的,现在我找出了导致问题的多个元素-this.tasks.archived=this.tasks.archived.concatthis.tasks.current.filterfunctiontask{return task.completed;};它对我有用,请摆弄一下手推车code@TonyRaoulIscaros他的小提琴正在演奏。完成一项任务,将其存档,然后与另一项任务一起执行。第一个完成的任务将从存档的任务中消失。不,我的意思是推送方法正在工作,好吧,现在我发现问题的原因不止一个。这是一个很好的解决方案,但小提琴不起作用。以上代码是正确的。小提琴上多了一副大括号,这是最好的解决办法。我从来没有听说过推送应用。谢谢@brso05@khichar.anil没问题@anil apply是一个函数方法,可以在任何函数上调用。它不是特定于推。以下是文档:这是一个很好的解决方案,但小提琴不起作用。以上代码是正确的。小提琴上多了一副大括号,这是最好的解决办法。我从来没有听说过推送应用。谢谢@brso05@khichar.anil没问题@anil apply是一个函数方法,可以在任何函数上调用。它不是特定于推。以下是文件: