【问题标题】:Build boolean expression from arrays and evaluate entire expression at one time in javascript从数组构建布尔表达式并在javascript中一次评估整个表达式
【发布时间】:2022-06-27 23:05:27
【问题描述】:

我有两个数组 - 一个包含布尔值,另一个包含运算符:

to_eval = [true, true, false, false]
ops=['&&', '||', '&&']

为此,我想构建一个表达式

result = true && true || false && false

应该根据优先规则评估为真

如果我遍历正在评估的数组,结果是错误的。

我可以构建一个字符串并使用 Eval 或 Function - 但从我所阅读的内容来看,这可能会导致 Web 应用程序出现安全问题。

在 Javascript 中是否有一种方法可以构建表达式而不对其进行评估,直到它完全形成,以便在不使用 Eval 或 Function 的情况下遵守优先规则?

【问题讨论】:

  • 如果值来自不受信任的来源,这只是一个安全问题。如果保证输入是这样的,那还不错。
  • 但更一般的答案是使用创建您调用的闭包数组。对&& 使用一个函数,对|| 使用另一个函数。

标签: javascript arrays boolean expression evaluation


【解决方案1】:

您可以使用Array#reduce 安全地为受信任的逻辑运算符创建映射函数:

const to_eval = [true, true, false, false];
const ops = ['&&', '||', '&&'];

const ops_map = {
  '&&': (a, b) => a && b,
  '||': (a, b) => a || b
};

const result = to_eval.reduce((acc, cur, i) => ops_map[ops[i-1]](acc, cur));

console.log(result);

【讨论】:

    猜你喜欢
    • 2013-12-15
    • 2017-12-26
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多