所以我应该创建一个具有两个输入的函数:一个 boolean 函数数组和一个运行每个函数的值。我应该返回一个 boolean 值,指示是否所有函数都返回 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通过运行函数发现错误结果!
感谢您的任何提示或帮助!
最佳答案
回调函数应该检查累加器。如果它是 false
,它应该只返回 false
而不必费心调用下一个函数,因为这意味着至少有一个较早的函数返回 false
.
这也意味着累加器的初始值应该为true
,否则你会立即停止。
此外,您可以使用 !!
将 fn(value)
调用的值转换为 boolean 值。
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
关于javascript - 对 boolean 函数数组运行reduce。它总是返回 true,并且如果返回 false,则无法找到一种方法来突破 reduce 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70040435/