CoderBittu
CoderBittu

Reputation: 51

Evaluation for all purposes JavaScript

I want an eval() function which will calculate brackets as same as normal calculations but here is my code

var str = "2(3)+2(5)+7(2)+2"

var w = 0;
var output = str.split("").map(function(v, i) {

  var x = ""
  var m = v.indexOf("(")

  if (m == 0) {
    x += str[i - 1] * str[i + 1]
  }

  return x;

}).join("")


console.log(eval(output))

Which takes the string str as input but outputs 61014 and whenever I try evaluating the output string, it remains same.

Upvotes: 0

Views: 60

Answers (2)

Niet the Dark Absol
Niet the Dark Absol

Reputation: 324640

Obligatory "eval() is evil"

In this case, you can probably parse the input. Something like...

var str = "2(3)+2(5)+7(2)+2";
var out = str.replace(/(\d+)\((\d+)\)/g,(_,a,b)=>+a*b);
console.log(out);
while( out.indexOf("+") > -1) {
    out = out.replace(/(\d+)\+(\d+)/g,(_,a,b)=>+a+(+b));
}
console.log(out);

Upvotes: 2

Dmitry Reutov
Dmitry Reutov

Reputation: 3032

You can do it much simplier, just insert '*' in a right positions before brackets

var str = "2(3)+2(5)+7(2)+2"
var output = str.replace(/\d\(/g, v => v[0] + '*' + v[1])
console.log(eval(output))

Upvotes: 1

Related Questions