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。
添加回答
舉報