【问题标题】:Javascript: Push Filtered Array to Existing ArrayJavascript:将过滤后的数组推送到现有数组
【发布时间】:2015-10-22 00:42:31
【问题描述】:

我在这里有一个小型待办事项应用程序: 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;
});

但我不想覆盖存档数组,只是为了推入:

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

【问题讨论】:

  • 怎么样 - this.tasks.archived = this.tasks.archived.concat(this.tasks.current.filter(function(task) { return task.completed; });)
  • 它对我有用,请修改错误代码
  • @TonyRaoulIscaros 他的小提琴正在“工作”。完成一项任务,将其存档,然后与另一项一起执行。第一个完成的任务将从存档的任务中消失。
  • 不,我的意思是推送方法有效,好吧,现在我发现导致问题的因素不止一个

标签: javascript arrays laravel vue.js


【解决方案1】:

使用 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

【讨论】:

    【解决方案2】:

    你可以像这样改变你的功能:

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

    .apply 用于组合数组,这里是一个有效的fiddle

    【讨论】:

    • 这是一个很好的解决方案,但小提琴不起作用。上面的代码是正确的。小提琴中有一对额外的大括号“()”。
    • 这是最好的解决方案。我从来没有新的关于“push.apply”。谢谢@brso05
    • @khichar.anil 没问题!
    • @khichar.anil apply 是一个函数方法,可以在任何函数上调用。它不是特定于push。这是文档:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
    【解决方案3】:

    可能是这样的:

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

    【讨论】:

      【解决方案4】:

      这是我在您的函数中更改的部分:

      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/

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

      【讨论】:

        猜你喜欢
        • 2020-05-11
        • 2011-07-07
        • 2021-06-18
        • 1970-01-01
        • 2020-11-25
        • 1970-01-01
        • 1970-01-01
        • 2018-12-09
        • 1970-01-01
        相关资源
        最近更新 更多