首页 > 解决方案 > 一个函数的函数数组(逻辑合取)

问题描述

我有一个函数数组,每个函数都返回布尔值:

(data, filter) => boolean

(取决于参数是否满足存储在函数中的条件),我想创建一个动态合并所有参数并返回一个函数作为逻辑连接的方法:

function1 && function2 && function3 && ...

我试图使用&=运算符,但它不起作用:

  method(expressions) {
    let result;
    expressions.forEach(exp => {
      result &= exp;
      console.log(result);
    });
    return result;
  }

标签: javascript

解决方案


给定这种函数数组:

const expressions = [
    (data, filter) => true,
    (data, filter) => false,
    ...
];

您可以像这样评估它们(df假定它们是传递给每个函数的值):

expressions.every(exp => exp(d, f))
// or
expressions.reduce((res, exp) => res && exp(d, f), true)

Array#every任何函数返回时都会停止false。您可以使用Array#some相反的方法测试是否有任何函数返回true. Array#reduce而是遍历所有表达式,并且更接近您尝试的内容;在这个特定的示例中,它不是很有用,但如果您需要以其他方式组合返回值,它会很有帮助。


推荐阅读