首页 > 解决方案 > 如何在 JavaScript 中实现变量运算符?

问题描述

我不确定“变量”是否是在这里使用的正确词,但本质上,我想使用 JavaScript 创建一个变量运算符。

到目前为止,我能想到的最好的事情是创建一个 switch 语句,但这似乎非常重复和乏味。有什么办法可以用条件运算符编写一个“If 语句”?

我想到的:

variableOperator(x, y, operator) {
    switch(operator) {
        case '>=':
            if (x >= y) {
                // logic
            }
            break;
        case '<=':
            if (x <= y) {
                // logic
            }
            break;
        case '<':
            if (x < y) {
                // logic
            }
            break;
        case '<':
            if (x < y) {
                // logic
            }
            break;
    }
}

我想知道在伪代码中是否可能(下面的代码显然不起作用,但在概念上,这是我理想情况下想要使用的)。无论运算符是什么(大于、等于等),这个 if 语句都可以处理它:

variableOperator(x, y, operator) {
    if (x operator y) {
        // logic
    }
}

编辑:我应该澄清一下:x 和 y 并不总是必须是数字类型。

主要是,我想知道字符串(az,AZ,0-9)比较(== 或!=)和数字比较(<,>,<=,>=)。我正在做的项目不需要担心表情符号或其他复杂字符。

本质上,无论我是在比较字符串还是数字,我都想知道运算符本身是否可以是一个可以轻松操作/更改的变量,这样就不必为每种情况编写单独的代码.

标签: javascriptsyntaxconditional-statementscomparisonoperators

解决方案


在查找表中编码您的运算符,然后您可以使用它来确定要做什么。这将您的代码简化为仅if用于检查值是否通过操作员检查的语句。您还可以包含一个后备 - 如果未找到运算符,则假设它失败。

const operators = {
  ">" : (a, b) => a > b ,
  ">=": (a, b) => a >= b,
  "<" : (a, b) => a < b ,
  "<=": (a, b) => a <= b,
  "==": (a, b) => a == b,
}

function doStuff(x, y, op) {
  const check = operators[op] ?? (() => false);
  
  if (check(x, y)) {
    console.log("do something");
  } else {
    console.log("ignore");
  }
}

doStuff(4, 2, ">");
doStuff(2, 4, "<");
doStuff("apple", "banana", "<");
doStuff(4, 2, "==");
doStuff(4, 2, "");


推荐阅读