首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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

回答 8

Stack Overflow用户

发布于 2019-07-26 03:30:22

您可以使用一个分隔数组和eval表达式来连接该数组。这会尊重运算符的优先级。

代码语言:javascript
运行
复制
const
    join = ([a, b, ...array], [s, ...separators]) => array.length
        ? join([a + s + b, ...array], separators)
        : a + s + b;

var num = [12, 13, 15, 22],
    oper = ["+", "-", "*"],
    term = join(num, oper);

console.log(term);
console.log(eval(term));

如果您不需要运算符优先级,则可以使用带有运算符的对象并减少数组。

代码语言:javascript
运行
复制
var num = [12, 13, 15, 22],
    oper = ["+", "-", "*"],
    op = { '+': (a, b) => a + b, '-': (a, b) => a - b, '*': (a, b) => a * b },
    opValues = oper.values(),
    result = num.reduce((a, b) => op[opValues.next().value](a, b));

console.log(result);

票数 3
EN

Stack Overflow用户

发布于 2019-07-26 03:17:18

假设您的numoper格式良好,您可以尝试这样做:

代码语言:javascript
运行
复制
var num = [
  12, 13, 15, 22
];
var oper = [
  "+", "-", "*"
];

var exp = '';
while (num.length || oper.length) {
  if (num.length) {
    exp += num.shift();
  }
  if (oper.length) {
    exp += oper.shift();
  }
}

var result = eval(exp);
console.log(result);
票数 1
EN

Stack Overflow用户

发布于 2019-07-26 03:17:25

如果要将其作为考虑运算符优先级的表达式进行计算,则可以使用reduceeval

代码语言:javascript
运行
复制
var num = [ 12, 13, 15, 22 ];
var oper = [ "+", "-", "*" ];

let final = num.reduce((op,inp,index)=>{
  op += index === 0 ? inp : `${oper[index-1]} ${inp}`
  return op 
},'')

console.log(eval(final))

原始答案

这不计入运算符优先级,它一次只计算从左两个到右两个运算符的值,

代码语言:javascript
运行
复制
var num = [ 12, 13, 15, 22 ];
var oper = [ "+", "-", "*" ];

let final = num.reduce((op,inp,index)=>{
  if(index === 0) op += inp
  else {
    switch(oper[index-1]){
      case '+' : op += inp; break;
      case '-' : op -= inp; break;
      case '*' : op *= inp; break;
      default: op;
    }
  }
  return op
},0)

console.log(final)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57208746

复制
相关文章

相似问题

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