javascript - 对 boolean 函数数组运行reduce。它总是返回 true,并且如果返回 false,则无法找到一种方法来突破 reduce 方法

标签 javascript arrays boolean reduce

所以我应该创建一个具有两个输入的函数:一个 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/

相关文章:

Visual Studio 中的 Javascript 调试

javascript - Angular 2 管理 Route 的状态变化

JavaScript:将内置对象的方法作为回调函数传递

database - 检查 Postgresql 是否正在监听

c - 是否可以将 else 与 C/C++ 中的其他范围结合起来

javascript - var someObj = {}; 之间的区别和 var someObj = new RealObj

java - 如何完成这部分代码?

PHP:意外行为:foreach ... {$array ['country' ][] = $value ['country' ]}

c - 如何在C中用0填充数组

java - Spring 上下文:property-placeholder for a boolean value