Arrays.filter无法识别为函数

时间:2019-07-23 15:19:37

标签: javascript arrays node.js

因此,在下面的代码中,我试图过滤出状态不完整的任务,但是由于某种原因,终端指出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())

2 个答案:

答案 0 :(得分:3)

我这样修改了您的代码:

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中的每个元素;

答案 1 :(得分:1)

您正在filter常量所引用的对象上调用const tasks。而是使用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);

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