首页 > 解决方案 > 如何使用两个单独的数组执行操作,一个包含值,另一个包含操作数

问题描述

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]
}

但这对我不起作用

我怎样才能实现我想要做的事情。

此处不需要 Ps 操作数优先级。

标签: javascript

解决方案


您可以将数组与分隔符数组和 eval 表达式连接起来。这尊重运算符的优先级。

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));

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

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);


推荐阅读