我不明白為什么輸出是 17 它只回傳真值而不是假值或者假值也是布林值
function countSheeps() {
const array1 = [true, true, true, false,
true, true, true, true,
true, false, true, false,
true, false, false, true,
true, true, true, true,
false, false, true, true]
return array1.filter(Boolean).length;
}
輸出為 17。
uj5u.com熱心網友回復:
Booleantrue如果其引數為真則回傳,false否則回傳。Array#filter只保留回呼回傳的值true(或真值)。這里,Boolean是回呼,因為陣列中的所有值都已經是布林值,所以只有true值被保留。如果要保留所有原始布林值,可以typeof在自定義回呼函式中使用。
const array1 = [true, true, true, false,
true, true, true, true ,
true, false, true, false,
true, false, false, true ,
true, true, true, true ,
false, false, true, true]
console.log(JSON.stringify(array1.filter(Boolean)));
console.log([true, true, false, true, false, 1, "test"]
.filter(x => typeof x === 'boolean'));
uj5u.com熱心網友回復:
Array.prototype.filter()通過評估每次迭代給它的回傳值來作業。將回傳一個新陣列,但僅回傳塊中回傳真實值的值/迭代。請參閱:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
現在看看該函式的Boolean作用:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean
從本質上講,您將每個值從array1to傳遞filter,并且對于每次迭代,您都通過Boolean使用相關元素呼叫該函式回傳回傳值。當您傳遞true給該函式時,它會回傳true,因此該值將最終出現在該filter方法回傳的陣列中。當您傳遞false時,布爾函式false在塊中回傳 to filter,這意味著該filter方法不會將該值包含在其回傳值中。
console.log(Boolean(true)); // This returns true, so all these values from array1 end up in the final array that filter returns.
console.log(Boolean(false)); // This returns false, which means for that iteration you're returning a falsey value to the filter method, therefore filter will not keep select/keep the element in question.
uj5u.com熱心網友回復:
過濾陣列方法:根據內部提供的條件過濾陣列。
arr = [1,2,3,4,5,6];
arr.filter(ele => ele>3)
output: Array(3) [ 4, 5, 6 ]
Boolean : 如果值為 true,則布林值回傳 true
Boolean(true)
output: true
反之亦然
Boolean(false)
output: false
在這里您檢查 Boolean(true),如果為真值,則它正在計數,但如果為假,則將其過濾掉。要糾正這種情況,請在過濾器函式中使用型別檢查。
function countSheeps() {
const array1 = [true, true, true, false,
true, true, true, true,
true, false, true, false,
true, false, false, true,
true, true, true, true,
false, false, true, true]
return array1.filter(item => typeof(item)==='boolean').length;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/473549.html
標籤:javascript 数组 功能 筛选 布尔值
下一篇:用大寫反轉每個單詞而不更改單詞
