【问题标题】:How to implement a variable operator in JavaScript?如何在 JavaScript 中实现变量运算符?
【发布时间】:2021-05-21 19:49:42
【问题描述】:

我不确定“变量”是否是在这里使用的正确词,但本质上,我想使用 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 并不总是必须是数字类型。

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

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

【问题讨论】:

  • 不,这些是我们无法以这种方式操作的语言级别工具。
  • 这些是您唯一关心的运营商吗? ab 是否只能是 Number 类型?
  • 您希望variableOperator("foo", "bar", "????") 产生什么?
  • @RandyCasburn/VLAZ - 很好的收获。我希望我在上面的帖子中进行了澄清。
  • 我原来的评论是成立的。答案是不。但据我所知,你的前提仍然存在缺陷。在您的示例中,您在 4 种情况下有 4 条条件语句,具有基于条件的独立逻辑 - 但是您理想的解决方案是让您以某种方式传递一个运算符并且只使用一点逻辑?您仍然需要 4 个独立的逻辑位,这似乎是合乎逻辑的——它们会去哪里?

标签: javascript syntax conditional-statements comparison operators


【解决方案1】:

在查找表中编码您的运算符,然后您可以使用它来确定要执行的操作。这会将您的代码减少为仅一个 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, "?");

【讨论】:

  • 太棒了。我打算以类似的方式推荐咖喱,但这很管用。
猜你喜欢
  • 2017-04-23
  • 2020-10-28
  • 2013-10-19
  • 2017-10-06
  • 2021-11-03
  • 2016-11-17
  • 2020-03-31
  • 2013-01-27
相关资源
最近更新 更多