包含加减运算符的字符串,用于评估答案

时间:2019-07-18 11:38:26

标签: javascript node.js

如何获取带有数字的字符串的结果以及之间的加/减/乘运算符

  

“ 1 + 5 + 6”,“ 5-8 + 6”,“ 1 + 5-8 + 9 + 4 + 6” ..等

4 个答案:

答案 0 :(得分:0)

使用评估功能:

eval(expression)

console.log(eval("1+5-8+9+4+6"))
console.log(eval("1+5-8+9*6"))

答案 1 :(得分:0)

您可以像这样使用函数构造函数/ eval if it is safe to do so

const str = "1+5+6";
const res = (new Function("return "+str))();
console.log(res); // 12

或者,或者,如果您只在字符串中使用加号或减号,我建议您将字符串.split()放入数组,然后使用.reduce()对每个数字求和,例如所以:

const str = "1+5+6-1+2";
const res = str.split(/([+-]\d+)/).reduce((sum, n) => sum+ +n, 0);
console.log(res); // 13

答案 2 :(得分:0)

对于这样的简单方程式,您不需要邪恶(eval)或它的小兄弟Function构造函数。这些公式只需几个命令即可解析和评估。

[
"1+5+6",
"5-8+6", "1+5-8+9+4+6"
].forEach(formula => {
  const result = formula.replace(/\s/g, "") // remove whitespace (just in case)
    .split(/(?=[+-])/) // split the string into numbers with their respective sign
    .map(Number)  // convert them into actual numbers
    .reduce((a,b) => a+b); // get the sum of the numbers (positive and negative)
    
  console.log(formula, "=", result);
})

答案 3 :(得分:0)

使用splitreduce方法:

以下代码段适用于所有 +/- 到任意位置。

const val1= "1+5+6";
const val2= "1+5+6-3-4+5+6-3-5";
const val3= "-1+5+6-1-3-8+1";

let lastSign = '';

console.log(LetsSum(val1));
console.log(LetsSum(val2));
console.log(LetsSum(val3));

function LetsSum(val) {
  return val.split('').reduce((sum, ele, i) => {
    if(isNaN(parseInt(val[i]))) {
      lastSign = val[i];
    } else {
     sum = sum + +(lastSign+ele);
    }
  return sum;
  }, 0);
}