v2.5.2
Giriş yap

Eval fonksiyonu kullanmadan Stringteki problemi çözme.('4+7*8-4/2').

Anonim
477 defa görüntülendi ve 1 kişi tarafından değerlendirildi

<b>Başlıkta herşey açık :D stringteki problemi nasıl çözerim acaba ?P.S JAVASCRİPT</b>

Cevap yaz
Cevaplar (1)
tayfunerbilen
1463 gün önce

yalnız eval tam da bu gibi durumlar için var zaten. eval kullanmak istememenin sebebi nedir?

eval kullanmak istemezsen, aşağıdaki gibi uzun bir fonksiyona ihtiyacın olacak :)

function calculate(input){

   var f = { add : '+'
           , sub : '-' 
           , div : '/'
           , mlt : '*'
           , mod : '%'
           , exp : '^' };

   f.ooo = [[ [f.mlt] , [f.div] , [f.mod] , [f.exp] ],
            [ [f.add] , [f.sub] ]];

   input = input.replace(/[^0-9%^*\/()\-+.]/g,'');

   var output;
   for(var i=0, n=f.ooo.length; i<n; i++ ){
      var re = new RegExp('(\\d+\\.?\\d*)([\\'+f.ooo[i].join('\\')+'])(\\d+\\.?\\d*)');
      re.lastIndex = 0;
      while( re.test(input) ){
         output = calc_internal(RegExp.$1,RegExp.$2,RegExp.$3);
         if (isNaN(output) || !isFinite(output)) return output;
         input  = input.replace(re,output);
      }
   }

   return output;

   function calc_internal(a,op,b){
      a=a*1; b=b*1;
      switch(op){
         case f.add: return a+b; break;
         case f.sub: return a-b; break;
         case f.div: return a/b; break;
         case f.mlt: return a*b; break;
         case f.mod: return a%b; break;
         case f.exp: return Math.pow(a,b); break;
         default: null;
      }
   }
}

console.log( calculate('4+7*8-4/2') )