如何找到算术运算符并将其及其索引分配给全局可访问变量



我是一名网络开发新手,正试图在React中构建一个计算器作为一个实践项目。

为了做到这一点,我需要用户选择的算术运算("+"、"/"、"-"或"X"(在用户点击"+"时执行=&";。

我将用户单击的按钮的所有字符推到一个数组中,包括算术运算符。

因此,例如,如果用户点击";3〃;,那么"+&";,那么";6〃;,状态数组(称为"numberList"(是[3,"+",6]。我遇到的问题是识别算术运算符的索引。我尝试过循环、if语句和数组方法的各种组合。这是我的最新尝试:


for (let i = 0; i < numberList.length; i++) {
switch (numberList[i]) {
case "+":
operator = "+";
operatorIndex = i;
break;
case "/":
operator = "/";
operatorIndex = i;
break;
case "-":
operator = "-";
operatorIndex = i;
break;
case "X":
operator = "X";
operatorIndex = i;
break;
default:
return "ERR";
}
}
//Find operators and their index in numberList
console.log(numberList, operator, operatorIndex);

但当我运行这个程序时;ERR";即使numberList数组中存在匹配的算术运算符,也会返回default。

为什么代码在";运算符";以及";运算符索引";是否分配了运算符及其索引的值?

谢谢David

总是返回'ERR',因为数组的第一个元素是数字,并且在切换语句时使用return而不是break

如果你想要一个简单的解决方案,你可以使用以下代码:

const numberList = [3, "+", 6];
const result = eval(numberList.join('').replaceAll('X', '*'));
console.log(result); // 7

注意:eval可能会带来一些安全问题,所以不应该使用它。有关MDN 的更多信息

由于数组numberList可以包含数字和算术运算符号,如果数组中有任何数字,则此代码将始终位于default块中,因为在switch语句中没有处理数字的分支。如果你的数组numberList例如像这个numberList=[3, "+", 6],那么对于数字36,它将进入defuault块+&";。试着像这个var numberList = ["+","-"];一样通过numberList,你会发现不会有错误。顺便说一句,您的代码总是会抛出类似Illegal return statement的错误,因为返回语句只允许在函数内部使用。

最新更新