简体   繁体   English

javascript 字符串中的逻辑运算符

[英]javascript Logical operator In string

I have a string like this "(ReadAccountAccess || ReadContractAccess) && CreateAccountAccess"我有一个像这样的字符串"(ReadAccountAccess || ReadContractAccess) && CreateAccountAccess"

And I have this object:我有这个 object:

{
  PermissionID: 1,
  AccountID: 1,
  ReadAccountAccess: true,
  ReadContractAccess: true,
  CreateAccountAccess: true,
}

How can I check this condition?我如何检查这种情况?

It is NOT recommended, but you could use with statement and evaluate the expression with that object as the scope.不建议这样做,但您可以使用with语句并将 object 的表达式计算为 scope。

 function check(obj, condition) { with(obj) { return eval(condition) } } const input={PermissionID:1,AccountID:1,ReadAccountAccess:true,ReadContractAccess:true,CreateAccountAccess:true}; console.log( check(input, "(ReadAccountAccess || ReadContractAccess) && CreateAccountAccess"), check(input, "ReadAccountAccess === false"), check(input, "AccountID === 1") )

Instead of saving the condition in a string, you could use a function which takes an object as an input and returns the condition expression.您可以使用 function 作为输入并返回条件表达式,而不是将条件保存在字符串中。 This is a much better of deferring the check.这比推迟检查要好得多。

 const input={PermissionID:1,AccountID:1,ReadAccountAccess:true,ReadContractAccess:true,CreateAccountAccess:true}; const c1 = o => (o.ReadAccountAccess || o.ReadContractAccess) && o.CreateAccountAccess, c2 = o => o.ReadAccountAccess === false, c3 = o => o.AccountID === 1 console.log( c1(input), c2(input), c3(input) )

You can use eval() javascript function.您可以使用eval() javascript function。

 const obj = { PermissionID: 1, AccountID: 1, ReadAccountAccess: true, ReadContractAccess: true, CreateAccountAccess: true, }; const { PermissionID, AccountID, ReadAccountAccess, ReadContractAccess, CreateAccountAccess } = obj; const opr = "(ReadAccountAccess || ReadContractAccess) && CreateAccountAccess"; console.log(eval(opr));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM