js加減乘除混合運算
阿新 • • 發佈:2019-02-04
function getResult(str){ // var _str=str.repalce('*','×'); // var __str=_str.replace('/','÷'); var str1=str.split(''); var str2=[]; for(var i=0;i<str1.length;i++) { if(!Number(str1[i])&&str1[i]!='.'&&str1[i]!='0') { str2.push('|',str1[i],'|'); } else { str2.push(str1[i]); } } // alert(str12); var arr=str2.join('').split('|'); // alert(arr); var ops='+-#×÷'.split(''); var result=[]; var temp=[]; arr.forEach(function(ele,ind){ if(ele=='(') { temp.push(ele); } else if(ele==')') { var flag=true; while(flag) { if(temp[temp.length-1]!='(') { result.push(temp.pop()); } else { temp.pop(); flag=false; } } } else if(ops.indexOf(ele)!=-1) { cmp(ele,temp); function cmp(x,t){ if(t.length==0||t[t.length-1]=='('|| (ops.indexOf(x)-ops.indexOf(t[t.length-1]))>2) { t.push(x); } else { result.push(t.pop()); return cmp(x,t); } } } else { result.push(ele); } }) while(temp.length>0) { if(temp[temp.length-1]!='('){ result.push(temp.pop()); } else { temp.pop(); } } // alert(result); var res=result; result=[]; res.forEach(function(ele,ind){ if(ele!='') result.push(ele); }) // alert(result); var s=[]; // alert(s); result.forEach(function(ele,ind){ var reg=/^\d+(\.\d+)?$/; if(reg.test(ele)) { s.push(ele); } else { var ans; var a=parseFloat(s.pop()); var b=parseFloat(s.pop()); if(ele=='+') ans=a+b; if(ele=='-') ans=b-a; if(ele=='×') ans=a*b; if(ele=='÷') ans=b/a; s.push(ans); } }) // alert(s); return s[0]; }