【问题标题】:Arrays.filter not recognized as a functionArrays.filter 未被识别为函数
【发布时间】:2019-07-23 23:31:03
【问题描述】:

所以在下面的代码中,我试图过滤掉处于不完整状态的任务,但由于某种原因,终端说tasks.filter 不是函数。

const tasks = {
    tasks: [{
        text: 'Grocery shopping',
        completed: true
    },{
        text: 'Clean yard',
        completed: false
    }, {
        text: 'Film course',
        completed: false
    }],

    getTasksToDo: function(){
        const completedTasks = tasks.filter(function(){
            return this.tasks.completed === false
        })
    }
}

console.log(tasks.getTasksToDo())

【问题讨论】:

  • tasks 不是数组。 tasks.tasks.
  • 只是混淆了自己将对象变量命名为与对象中的属性相同
  • 标题应该是object.filter 不是函数...

标签: javascript arrays node.js


【解决方案1】:

我这样修改了你的代码:

const tasks = { tasks: [{ text: 'Grocery shopping', completed: true },{ text: 'Clean yard', completed: false }, { text: 'Film course', completed: false }],

  getTasksToDo: function(){
    return this.tasks.filter(function(task){
        return task.completed === false
    });
  }
}

console.log(tasks.getTasksToDo())

过滤器函数回调将“任务”作为参数,您需要检查是否已完成,因为这是this.tasks 中的每个元素;

【讨论】:

    【解决方案2】:

    您正在对 const tasks 常量引用的对象调用 filter。相反,使用this.tasks.filtertasks.tasks.filter 来引用该对象的tasks 属性。 (JavaScript 没有像 Java 或 C# 那样的“隐式this”概念。)

    您的filter 呼叫也不正确。你在检查

    this.tasks.completed === false
    

    ...但是该调用中的this 将是this 或全局对象。相反,接受参数并使用它:

    const tasksToDo = this.tasks.filter(task => task.completed === false);
    

    或者更习惯的说法:

    const tasksToDo = this.tasks.filter(task => !task.completed);
    

    你也可以对它进行解构:

    const tasksToDo = this.tasks.filter(({completed}) => !completed);
    

    注意,我更改了常量的名称,因为这些是未完成的任务,而不是已完成的任务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      相关资源
      最近更新 更多