var num = [12, 13, 15, 22];
var oper = ["+", "-", "*"];我如何做一个循环,这样,我可以做下面的操作
12 + 13 - 15 * 22我试着这样做:
for(var t = 0; t < num.length - 1; t++) {
retVal += num[t] oper[t] num[t+1]
}但这对我来说并不是真的有效
我如何才能实现我想要做的事情。
附注:这里不需要操作数优先级。
发布于 2019-07-26 03:37:56
您的"oper“数组将”运算符“存储为字符串。在循环的第一次迭代中,行retVal += num[t] oper[t] num[t+1]执行以下赋值:
retVal += 12 "+" 1312 "+" 13不是有效的语法,它只是两个数字和一个字符串并排出现。这不会做任何事情。
此外,在for循环的最后一次迭代中,您将引用num数组中不存在的索引。t为3,num[3+1]即num[4]不存在。你需要修正你的for逻辑,这样你才能在数组的范围内。
有几种方法可以执行oper数组中指定的操作。例如,您可以将数组元素连接成一个字符串,然后使用eval()函数计算该字符串。假设保证num和oper的格式正确,那么一个简单的实现可能如下所示:
var num = [ 12, 13, 15, 22 ];
var oper = [ "+", "-", "*" ];
var expression = "";
for (var i = 0; i < oper.length; i++ ) {
expression += String(num[i]) + oper[i];
}
expression += num[oper.length];
return eval(expression);我建议为您的应用程序定制循环逻辑;我所实现的只是为了演示。重要的部分是对字符串expression进行求值。如果您检查epxression,您将看到它是"12+13-15*22"。正确地说,返回值是-305。
另一种技术可能是使用Switch语句评估oper的元素。
var num = [ 12, 13, 15, 22 ];
var oper = [ "+", "-", "*" ];
var result = num[0]
for (var i = 0; i < oper.length; i++ ) {
switch(oper[i]) {
case '+' : result += num[i+1]; break;
case '-' : result -= num[i+1]; break;
case '*' : result *= num[i+1]; break;
}
}
return eval(result);与eval()技术不同,它返回220。这是因为这些操作完全按照oper数组的顺序执行,而不是按照运算的数学顺序执行。
这个操作顺序应该是您决定实现什么方法时的一个考虑因素。
重复一遍,我的例子中的for循环只是为了演示这个特定的例子,在其他情况下很可能会失败。围绕实际使用中可能期望的num和oper的值构建您的逻辑。
https://stackoverflow.com/questions/57208746
复制相似问题