javascript - 一个函数的函数数组(逻辑合取)
问题描述
我有一个函数数组,每个函数都返回布尔值:
(data, filter) => boolean
(取决于参数是否满足存储在函数中的条件),我想创建一个动态合并所有参数并返回一个函数作为逻辑连接的方法:
function1 && function2 && function3 && ...
我试图使用&=
运算符,但它不起作用:
method(expressions) {
let result;
expressions.forEach(exp => {
result &= exp;
console.log(result);
});
return result;
}
解决方案
给定这种函数数组:
const expressions = [
(data, filter) => true,
(data, filter) => false,
...
];
您可以像这样评估它们(d
并f
假定它们是传递给每个函数的值):
expressions.every(exp => exp(d, f))
// or
expressions.reduce((res, exp) => res && exp(d, f), true)
Array#every
任何函数返回时都会停止false
。您可以使用Array#some
相反的方法测试是否有任何函数返回true
. Array#reduce
而是遍历所有表达式,并且更接近您尝试的内容;在这个特定的示例中,它不是很有用,但如果您需要以其他方式组合返回值,它会很有帮助。
推荐阅读
- tensorflow - Keras 中的打印验证丢失
- java - 订阅/迭代 Mono 列表
- reactjs - 无法导出带有 getServerSideProps 的 nextjs 页面
- django - 将 PostgreSQL 从 9.6 升级到 11
- c++ - MainWindow 中的子窗口显示一秒钟然后消失
- html - 使 v-treeview 与 flexbox 中的行具有相同的高度
- imagemagick - 可靠地将图像水平压缩为 1 列像素,阈值为 100%
- vue.js - 在带有表单的几页上进行完全静态给出问题
- java - 是否可以在 Ubuntu 中将 jdk 1.8.0_252 更改为 jdk 1.8.0_251?
- java - 给定的gradle下载工件版本