我是一名网络开发新手,正试图在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]
,那么对于数字3
和6
,它将进入defuault
块+&";。试着像这个var numberList = ["+","-"];
一样通过numberList
,你会发现不会有错误。顺便说一句,您的代码总是会抛出类似Illegal return statement
的错误,因为返回语句只允许在函数内部使用。