js類定義(翻出的js代碼)

/*類機制定義*/ window.Class = function(name, src) { src.constructor.prototype = src; window[name] = src.constructor; }; /*自定義類*/ Class("ArrayUtils", { constructor: function() { }, toArray : function(iterable) { var length = iterable.length, results = new Array(length); while (length--) { results[length] = iterable[length] }; return results; }, camelize : function(s) { return s.replace(/\-(.)/g, function(m, l){return l.toUpperCase()}); }, inArray : function(arr,item) { return (this.search(arr,item) != null); }, search : function(arr,itm) { for(var i=0; i 100000){ this.items.shift(); } }, remove : function(item){ var s = []; //移除item,然後遍歷,把剩下發的賦值給items for(var i = 0, len = this.items.length; i =,,between and * SQL:= TB2.REF_CITY_CODE = '1' AND TB3.REF_REGION_CODE IN (select * from aaa) * 【建議把in的用括號包含】 TB2.REF_CITY_CODE = '1' AND (TB3.REF_REGION_CODE IN (select * from aaa) ) * * HAVING和WHERE的處理方式是一樣的HAVING SUM(TB1.PAY_MONEY)0 * where中有聚合函數TB2.REF_CITY_CODE = '1' and sum(TB2.REF_CITY_CODE) * * 【建議把between and用括號包含,要不然就拆成2個大於小於】 * TB2.REF_CITY_CODE between 21 and 44可以改成2個TB2.REF_CITY_CODE> 21 and TB2.REF_CITY_CODE200-----建議使用別名,不要把聚合函數放到where裏面 * * select a,b from (select a,b, sum(aa) as c from table1 where c > 100 ) * * * * 目前還不支持一個長括號裏面有評級的,能取出來,但是不能替換 * * * * minCell--minCellCopy[相同的()的已被替換成'@',],然後對minCellCopy[i]進行分詞即可 * * */ Class("WhereParser", { constructor: function() { // this.key = key;//可能處理類型,key:[where|having] this.items = []; this.myStack = new Stack();//上面有定義 this.inputString = '';//需要解析的字符串 this.logicOperatorKey = ['and','or','in'];//邏輯運算符,報表中where的關鍵字分隔符:and ,or 和 in this.argoOperatorKey = ['=',''];//算數運算符=,>=, this.exceptOperatorKey = ['between'];//特殊處理between and this.dataObject =new Array();//對象數組,準備放對象的 {field , op , value} this.logicOpArray = []; this.opArray = []; this.typeArray = []; }, getDataObject:function(){ return this.dataObject; }, getLogicOpArray:function(){ return this.logicOpArray; }, getOpArray:function(){ return this.opArray; }, getTypeArray:function(){ return this.typeArray; }, trim: function( text ) { var rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g; return (text || "").replace( rtrim, "" ); }, /*判斷是否存在此關鍵字key,type取值{l是邏輯運算符,a是算數運算符}*/ hasKey : function(type,key){ var arrayUtils = new ArrayUtils(); if(type == 'l'){ return arrayUtils.inArray(this.logicOperatorKey,key); } if(type == 'a'){ return arrayUtils.inArray(this.argoOperatorKey,key); } }, /*設置要解析的字符串*/ setParseString : function(inputString){ this.inputString = inputString; //document.write( "輸入字符串:"+this.inputString+"

"); return this;//鏈式操作 }, /* */ process : function(){ var myString = this.inputString; //document.write("匹對過程
"); //最小計算單元內的左括號個數,當棧的總和爲0,此數歸0 var leftCount=0; //傀儡,只爲存放一個char,其實可以不用 var dummy = new Array(); //this.msg(this.inputString.length); var stackString = "";//只存放棧中完整的字符 var stackStartFlag = false; var wordString = ""; var wordChar = ""; for(var i =0;i<mystring.length i count dummy if>0){ //遇到空格,分詞 -------下一個字符不是算數運算符 if(dummy[i-1]==' '&amp;&amp;this.hasKey('a',dummy[i])==false){ //遇空則清 wordString = ""; } wordString = wordString + dummy[i]; if(dummy[i]==' '&amp;&amp;wordString.length&gt;1&amp;&amp;this.myStack.getCount()==0){ var wordString = this.trim(wordString); if(wordString=='AND' || wordString=='OR'){ this.logicOpArray.push(wordString); }else{ //顯示不是and和or的 //alert(wordString); this.dataObject.push(wordString); } } } if(stackStartFlag){ stackString = stackString+dummy[i]; } //當'('的時候入棧,記下位置 if(dummy[i]=='('){ this.myStack.add(i); if(leftCount==0){ //alert("開始啦"); stackString = "("; stackStartFlag = true; } leftCount++; this.count++; } //當')'的時候出棧 if(dummy[i]==')'){ var before = this.myStack.next(); var current = i+1; var str = myString.substring(before,current); leftCount--; if(leftCount==0){ //alert("結束啦"); //this.dataObject.push(stackString); stackStartFlag = false; } if(this.myStack.getCount()==0){ wordString = stackString; //recureProcessing(wordString); } document.write("leftCount:="+leftCount+" result="+str+"<hr>"); var bStr = myString.substring(0,before); var aStr = myString.substring(current,myString.length); var finalStr = bStr + "@" + aStr; //alert(aStr.length); if(leftCount&gt;0){ //myStr=myStr.replace(me+'',' '); if(aStr.length"); // document.write( "<font color="red">this.dataObject:"+this.dataObject.length+"個</font><br>"); // document.write("<br>"+this.inputString+"<br>"+"<br>"); var op =""; for(var i =0;i ")&gt;-1){ op="&gt;"; } if(s.indexOf("-1){ op="-1){ op="="; } if(s.indexOf("&gt;=")&gt;-1){ op="&gt;="; } if(s.indexOf("-1){ op="")&gt;-1){ op=""; } var type = "number" ; if(s.indexOf("'")&gt;-1){ type="string"; } // if(s.indexOf(" OR ")&gt;-1){ // logicOp="and"; // } // this.typeArray.push(type); this.opArray.push(op); //document.write( "第"+i+"個 "+s+" op="+op+" type="+type+" logicOp="+this.logicOpArray[i]+" <br>"); } // document.write("<br>"); // document.write("<br>"); // document.write("<br>"); return this;//鏈式操作 }, msg:function(msg){ alert(msg); } }); //(f=3) and (a=1 and (b=2 or (c=4 and e=5) or (c1=4 and e=5) and ( d=3 ) //var a = new WhereParser(); // a.setParseString(" a&gt;='2' or (a in(20)) and b=3 and ( (c in(1,2,3,4)) and (a in(2,3,4) )) or (a=23) and e=3 "); //a.setParseString(" A&gt;='2' OR C&gt;33 AND B3 AND E</mystring.length>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章