首页 > 解决方案 > 从字符串到 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 中使用已经构建的函数,网站的性能将会很慢

标签: javascriptif-statement

解决方案


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);
}


推荐阅读