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:30:22
您可以使用一个分隔数组和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);
发布于 2019-07-26 03:17:18
假设您的num和oper格式良好,您可以尝试这样做:
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);发布于 2019-07-26 03:17:25
如果要将其作为考虑运算符优先级的表达式进行计算,则可以使用reduce和eval
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))
原始答案
这不计入运算符优先级,它一次只计算从左两个到右两个运算符的值,
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)
https://stackoverflow.com/questions/57208746
复制相似问题