为了账号安全,请及时绑定邮箱和手机立即绑定

我们如何使用 javascript 计算格式为

我们如何使用 javascript 计算格式为

繁星淼淼 2022-12-22 11:59:06
假设我有来自服务器端响应的字段值数据data: {value1: '12',value2: ''.value3: 'some string',value4: '34'}我有另一个 api 响应,其中包含要从前端 Javascript 评估的公式字符串:{formula: "AND(value1, OR(value2,value3), value4)"}如果公式可以是动态的,我如何从 JS 评估这个公式:{formula: "AND(value1, value2, value3, value4)"}
查看完整描述

1 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

让我们有一个可以接受多个参数并返回&&操作的函数。

function and(...args) { return args.reduce((acc, x) => { return acc && x }, true) }

将默认设置为 true。


我们会做同样的||操作

function or(...args) { return args.reduce((acc, x) => { return acc || x}, true) }

将默认设置为 true。


让我们将AND大写字母和OR大写字母替换为小写字母。

"AND(value1, OR(value2,value3), value4)".replace("AND", "and")

"OR(value1, OR(value2,value3), value4)".replace("OR", "or")

让我们使用功能replace_and并replace_or为此目的


function replace_and(str) { return str.replace("AND", "and") }

function replace_or(str) { return str.replace("OR", "or")

让我们用数据中的实际值替换公式中的值

让我们将其添加为一个函数,并通过在将其分配为值时仅在此处计算为 bool 值来使其更智能。这可以帮助我们解决混合使用整数、字符串和不同类型的问题。


function replace_values(data, formula) {

  return Object.entries(data).reduce((formula, [x, y]) => { 

                         bool = y ? true : false;

                         return formula.replace(x,bool); 

   }, formula)

}

让我们在完成所有 4 个步骤后进行评估。

eval("or(false, or(true))")

=> true

我们可以像这样评估一连串的功能


formula = "AND(value1, OR(value2,value3))"

data = {

value1: '12',

value2: '',

value3: 'some string',

value4: '34'

}


replace_values(data, replace_and(replace_or(formula)))

=> "and(true, or(false,true))"


eval(replace_values(data, replace_and(replace_or(formula))))

=> true


查看完整回答
反对 回复 2022-12-22
  • 1 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信