v2.5.2
Giriş yap

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

Anonim
529 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>

tayfunerbilen
1709 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') )