2 回答

TA贡献1829条经验 获得超7个赞
这是因为Array.prototype.filter
返回一个数组。
例如,这两个语句是等效的:
[1, 2, 3].filter(function(){
return false
}).length
和
[].length
这是因为:
[1, 2, 3].filter(function(){
return false
})
返回[]。
var one = [1, 2, 3].filter(function() {
return false
}) // Removes all elements from array
var two = []
console.log(one, one.length)
console.log(two, two.length)

TA贡献1776条经验 获得超12个赞
首先:过滤器函数迭代每个待办事项对象并返回一个新的待办事项对象列表。
每个 todo 对象都会传递给您作为参数提供的函数(在本例中为匿名函数),仅当该函数返回 true 时,todo 对象才会添加到新列表中。
由于您想知道仍需要完成的待办事项数量,因此您返回 !todo.completed,因为当 todo.completed 为 false 时,这将返回 true。
当过滤器函数迭代每个对象时,它会返回新列表,此时您可以访问它的长度。
返回 !todo.completed.lenght 并没有任何意义,因为您试图获取布尔值的长度,而过滤函数需要 true 或 false。
添加回答
举报