所以我應該創建一個具有兩個輸入的函式:一個布爾函式陣列和一個運行每個函式的值。我應該回傳一個布林值,指示是否所有函式都回傳 true。如果至少有一個函式回傳false,那么reduce 應該回傳false。
我遇到的問題是,即使其中一個函式的計算結果為 false 并且累加器設定為 false,如果陣列中還有另一個函式導致 true 值,那么它只會回傳 true,即使前面的函式是錯誤的。
我做了一些閱讀,顯然,沒有真正的方法可以擺脫正在運行的 reduce 方法。
const allClear = (funcArr, value) => {
// iterate through funcArr using reduce
return funcArr.reduce((acc, fn) => {
if (fn(value) === false) {
return false;
} else {
return true;
}
}, false)
}
這是組成函式陣列的測驗用例以及對函式的兩次呼叫......
const isOdd = num => num % 2 === 1;
const isPositive = num => num > 0;
const multipleOfFive = num => num % 5 === 0;
const numFnArr = [isOdd, isPositive, multipleOfFive];
console.log(allClear(numFnArr, 25)) // should log true
console.log(allClear(numFnArr, -25)) // should log false
我已經嘗試了很多函式的變體,但都無濟于事。一旦我將累加器設定為 false,它就會被陣列中的下一個函式設定回 true(用 -25 說第二個函式呼叫)并且無法弄清楚如何打破 reduce 并回傳 false 一旦我通過運行函式找到錯誤的結果!
感謝您提供任何提示或幫助!
uj5u.com熱心網友回復:
回呼函式應該檢查累加器。如果是false,它應該只回傳false而不必呼叫下一個函式,因為這意味著至少有一個較早的函式回傳false。
這也意味著累加器的初始值應該是true,否則你會立即停止。
此外,您可以使用!!將fn(value)呼叫的值轉換為布林值。
const allClear = (funcArr, value) => {
// iterate through funcArr using reduce
return funcArr.reduce((acc, fn) => {
if (!acc) {
return false;
}
return !!fn(value);
}, true)
}
const isOdd = num => num % 2 === 1;
const isPositive = num => num > 0;
const multipleOfFive = num => num % 5 === 0;
const numFnArr = [isOdd, isPositive, multipleOfFive];
console.log(allClear(numFnArr, 25)) // should log true
console.log(allClear(numFnArr, -25)) // should log false
uj5u.com熱心網友回復:
你可以帶Array#every。
const allClear = (funcArr, value) => funcArr.every(fn => fn(value));
const isOdd = num => num % 2 === 1;
const isPositive = num => num > 0;
const multipleOfFive = num => num % 5 === 0;
const numFnArr = [isOdd, isPositive, multipleOfFive];
console.log(allClear(numFnArr, 25)) // should log true
console.log(allClear(numFnArr, -25)) // should log false
隨著Array#reduce和邏輯與&&
const allClear = (funcArr, value) => funcArr
.reduce((r, fn) => r && fn(value), true);
const isOdd = num => num % 2 === 1;
const isPositive = num => num > 0;
const multipleOfFive = num => num % 5 === 0;
const numFnArr = [isOdd, isPositive, multipleOfFive];
console.log(allClear(numFnArr, 25)) // should log true
console.log(allClear(numFnArr, -25)) // should log false
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/361811.html
標籤:javascript 数组 布尔值 降低
