首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何对两个独立的数组执行运算,一个包含值,另一个包含操作数

如何对两个独立的数组执行运算,一个包含值,另一个包含操作数
EN

Stack Overflow用户
提问于 2019-07-26 03:10:53
回答 8查看 83关注 0票数 1
代码语言:javascript
运行
复制
var num = [12, 13, 15, 22];

var oper = ["+", "-", "*"];

我如何做一个循环,这样,我可以做下面的操作

代码语言:javascript
运行
复制
12 + 13 - 15 * 22

我试着这样做:

代码语言:javascript
运行
复制
for(var t = 0; t < num.length - 1; t++) {
  retVal += num[t] oper[t] num[t+1]
}

但这对我来说并不是真的有效

我如何才能实现我想要做的事情。

附注:这里不需要操作数优先级。

EN

Stack Overflow用户

发布于 2019-07-26 03:37:56

您的"oper“数组将”运算符“存储为字符串。在循环的第一次迭代中,行retVal += num[t] oper[t] num[t+1]执行以下赋值:

代码语言:javascript
运行
复制
retVal += 12 "+" 13

12 "+" 13不是有效的语法,它只是两个数字和一个字符串并排出现。这不会做任何事情。

此外,在for循环的最后一次迭代中,您将引用num数组中不存在的索引。t3num[3+1]num[4]不存在。你需要修正你的for逻辑,这样你才能在数组的范围内。

有几种方法可以执行oper数组中指定的操作。例如,您可以将数组元素连接成一个字符串,然后使用eval()函数计算该字符串。假设保证numoper的格式正确,那么一个简单的实现可能如下所示:

代码语言:javascript
运行
复制
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的元素。

代码语言:javascript
运行
复制
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循环只是为了演示这个特定的例子,在其他情况下很可能会失败。围绕实际使用中可能期望的numoper的值构建您的逻辑。

票数 0
EN
查看全部 8 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57208746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档