javascript - 从字符串到 if 语句
问题描述
有人可以告诉我如何从常规文本中制作 if 语句吗?例子:
let statement1 = "(5 < 10 < 15)"
let statement1 = createState(statement1); // output: true
let statement2 = "(50 < 100 < 150)"
let statement2 = createState(statement2); // output: true
let statement3 = "(5 > 10 > 15)"
let statement3 = createState(statement3); // output: false
let statement4 = "(50 > 100 < 150)"
let statement4 = createState(statement4); // output: false
function createState() {
// code here...
}
我找到了这个答案:If statement from string statement,但它正在使用 eval 并且我不想在 JS 中使用已经构建的函数 PS:如果我在 JS 中使用已经构建的函数,网站的性能将会很慢
解决方案
const statement = "(50 < 100 < 150)"
您可以使用正则表达式来忽略括号并拆分数字和运算符
const splitedStatement = statement.match(/(\d+|<|>|=|<=|>=|!=)/g) // ["50", "<", "100", "<", "150"]
然后使用内置的reduce函数循环遍历它
function createState(arg) {
const regex = /(\d+|<|>|=|<=|>=|!=)/g;
const operate = (num1, num2, opt) => {
switch (opt) {
case "=":
return num1 === num2;
case "!=":
return num1 !== num2;
case "<":
return num1 < num2;
case ">":
return num1 > num2;
case "<=":
return num1 <= num2;
case ">=":
return num1 >= num2;
default:
break;
}
};
return arg.match(regex).reduce((answer, item, index, array) => (index % 2 ? answer && operate(+array[index - 1], +array[index + 1], item) : answer), true);
}
推荐阅读
- identityserver4 - 与身份服务器4并发登录
- dart - 为什么列表项不包含对 Flutter 中 Dart 中变量的引用?
- c - 由于字符串复制导致的分段错误
- amazon-web-services - 使用 sudo 找不到命令“sam”
- mysql - SQL Server多数据库nodejs连接
- javascript - JavaScript 和 HTML 中的可拖动项目故障
- sql-server - 有没有办法通过 Windows 身份验证连接到 SQL Server,而不使用 Java 中的 Integrated Security=true 选项
- github - 在表 github markdown 中缩放图像
- c# - 使用 ConcurrentQueue/BlockingCollection 的并发生产者/消费者
- python-3.x - 如何实现 rtree 计算相交面积?