因此,在下面的代码中,我试图过滤出状态不完整的任务,但是由于某种原因,终端指出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())
答案 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.filter
或tasks.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);
请注意,我更改了常量的名称,因为这些是不完整任务,而不是已完成的任务。