Javascript Arrays.filter未被识别为函数
因此,在下面的代码中,我试图过滤掉处于未完成状态的任务,但由于某种原因,终端会显示Javascript Arrays.filter未被识别为函数,javascript,arrays,node.js,Javascript,Arrays,Node.js,因此,在下面的代码中,我试图过滤掉处于未完成状态的任务,但由于某种原因,终端会显示tasks。filter不是一个函数 const tasks = { tasks: [{ text: 'Grocery shopping', completed: true },{ text: 'Clean yard', completed: false }, { text: 'Film course',
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())
您正在对您的
const tasks
常量引用的对象调用filter
。相反,使用this.tasks.filter
或tasks.tasks.filter
引用该对象上的tasks
属性。(JavaScript没有像Java或C#do那样的“隐式this
”的概念。)
您的过滤器
调用也不正确。你在检查吗
this.tasks.completed === false
…但该调用中的此
将是此
或全局对象。相反,接受参数并使用它:
const tasksToDo = this.tasks.filter(task => task.completed === false);
或者更习惯地说:
const tasksToDo = this.tasks.filter(task => !task.completed);
您还可以对其进行分解:
const tasksToDo = this.tasks.filter(({completed}) => !completed);
注意:我更改了常量的名称,因为这些是未完成的任务,而不是已完成的任务。我修改了您的代码如下:
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())
过滤器函数回调以“task”作为参数,您需要对照它检查completed,因为这是this.tasks中的每个元素
任务
不是数组<代码>任务。任务是。只是你自己把对象变量命名为与objectTitle中的属性相同的对象变量应该是对象。过滤器
不是一个函数。。。