如何在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不一定总是数字类型。

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

实际上,不管比较的是字符串还是数字,我都想知道操作符本身是否可以是一个易于操作/更改的变量,这样就不必为每种情况编写单独的代码了。

将操作符编码到查找表中,然后您可以使用它来确定要做什么。这将您的代码减少到仅使用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, "👎");

最新更新