JavaScript常用字符串与数组扩展函数小结
string对象的扩展函数:
string.prototype.trim = function() { return this.replace(/^\s+|\s+$/g,""); } string.prototype.ltrim = function() { return this.replace(/^\s+/g,""); } string.prototype.rtrim = function() { return this.replace(/\s+$/g,""); } string.prototype.splitandtrim = function($delimiter, $limit) { var $ss = this.split($delimiter, $limit); for(var $i=0; $i<$ss.length; $i++) $ss[$i] = $ss[$i].trim(); return $ss; } string.prototype.htmlentities = function () { return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>'); } string.prototype.striptags = function () { return this.replace(/<([^>]+)>/g,''); } string.prototype.toarray = function() { return this.split(''); } string.prototype.tointarray = function() { var returnarray = []; for (var i=0; i<this.length; i++) { returnarray.push(this.charcodeat(i)); } return returnarray; } string.prototype.replaceall = function($old, $snew){ return this.replace(new regexp($old,"gm"),$snew); }
变量替换
var a = "i love {0}, and you love {1},where are {0}!";a.format("you","me"); string.prototype.format = function(){ var args = arguments; return this.replace(/\{(\d+)\}/g,function(m,i,o,n){ return args[i]; }); }
在字符串末尾追加字符串
string.prototype.append = function($str){ return this.concat($str); }
删除指定索引位置的字符,索引无效将不删除任何字符
string.prototype.deletecharat = function($sindex){ if($sindex<0 || $sindex>=this.length){ return this.valueof(); }else if($sindex==0){ return this.substring(1,this.length); }else if($sindex==this.length-1){ return this.substring(0,this.length-1); }else{ return this.substring(0,$sindex)+this.substring($sindex+1); } }
删除指定索引间的字符串.$sindex和$eindex所在的字符不被删除!依赖deletecharat
string.prototype.deletestring = function($sindex, $eindex){ if($sindex==$eindex){ return this.deletecharat($sindex); }else{ if($sindex>$eindex){ var tindex=$eindex; $eindex=$sindex; $sindex=tindex; } if($sindex<0)$sindex=0; if($eindex>this.length-1)$eindex=this.length-1; return this.substring(0,$sindex+1)+this.substring($eindex,this.length); } }
检查字符串是否以某个字符串(str)结尾
string.prototype.endswith = function($str){ return this.substr(this.length - $str.length) == $str; }
检查该字符串是否以某个字符串开始
string.prototype.startswith = function(str){ return this.substr(0, str.length) == str; }
比较两个字符串是否相等,不区分大小写!
string.prototype.equalsignorecase = function($str){ if(this.length!=$str.length){ return false; }else{ var tmp1=this.tolowercase(); var tmp2=$str.tolowercase(); return tmp1==tmp2; } }
将指定的字符串插入到指定的位置后面!索引无效将直接追加到字符串的末尾
string.prototype.insert = function($ofset, $str){ if($ofset<0 || $ofset>=this.length-1){ return this.concat($str); } return this.substring(0,$ofset)+$str+this.substring($ofset+1); }
将指定的位置的字符设置为另外指定的字符或字符串.索引无效将直接返回不做任何处理!
string.prototype.setcharat = function($ofset, $str){ if($ofset<0 || $ofset>=this.length-1){ return this.valueof(); } return this.substring(0,$ofset)+$str+this.substring($ofset+1); } string.prototype.replacelen = function(start, len, replaced) { if(!len) return this; if(start >= this.length) return this; var returnseg = ''; var returnseg2 = ''; var i = 0; for (; i < this.length; i++){ var c = this.charat(i); if(i < start) returnseg += c; if(i >= start + len) returnseg2 += c; } return returnseg + replaced + returnseg2; }
扩展基础类:
替换字符,这个在替换填入比较有用,比如***天***小时 替换为 <input />天<input />小时
string.prototype.replacechar = function(target, replaced, start) { if(!target) return this; if(!start) start = 0; var returnval = this.substring(0, start); var index = 0; for (var i = start; i < this.length; i++) { var c = this.charat(i); target = typeof target == 'function' ? target.call(this, index) : target; if (c == target) { returnval += typeof replaced == 'function' ? replaced.call(this, index) : replaced; while (i < this.length - 1 && this.charat(i + 1) == c) { i++; } index++; }else{ returnval += c; } } return returnval; }
将该字符串反序排列
string.prototype.reverse = function(){ var str=""; for(var i=this.length-1;i>=0;i--){ str=str.concat(this.charat(i)); } return str; }
计算长度,每个汉字占两个长度,英文字符每个占一个长度
string.prototype.uclength = function(){ var len = 0; for(var i=0;i<this.length;i++){ if(this.charcodeat(i)>255)len+=2; else len++; } return len; }
在字符串的左边填充一些特定的字符
string.prototype.lpad = function(len, s) { var a = new array(this); var n = (len - this.length); for ( var i = 0; i < n; i++) { a.unshift(s); } return a.join(""); }
在字符串的右边填充一些特定的字符
string.prototype.rpad = function(len, s) { var a = new array(this); var n = (len - this.length); for ( var i = 0; i < n; i++) { a.push(s); } return a.join(""); }
把字符串的首字母转化为大写
string.prototype.ucwords = function() { return this.substring(0,1).touppercase().concat(this.substring(1)); } string.prototype.contains = function($str) { return this.indexof($str) > -1 ? true : false; }
将格式为2008-04-02 10:08:44的字符串转成日期(string对象的值必须为: 2008-04-02 10:08:44)
string.prototype.todate = function(){ var str = this.replace(/-/g,"/"); return (new date(str)); }
将原来用字符串表示的十进数转成十进制浮点数: precision为精度
string.prototype.tofloat = function(precision){ precision = precision || 2; return parsefloat(this,10).tofixed(precision); }
将原来用字符串表示的十进数转成十进制整数
string.prototype.toint = function(){ return parseint(this,10).tostring(); }
将两个原来用字符串表示的十进数相加后当作字串返回 : addend为加数
string.prototype.add = function(addend){ var sum = parsefloat(this,10) + parsefloat(addend,10); return sum+""; }
十进制转其他进制代码如下nextscale为进制 如2,8,16
string.prototype.shiftscale = function(nextscale){ return parsefloat(this).tostring(nextscale); }
各进制互相转换 :
this对象必须是整数
@param prescale 原是是几进制数
@param nextscale 要转换成几进制数
string.prototype.scaleshift = function(prescale,nextscale){ return parseint(this,prescale).tostring(nextscale); }
全角2半角 document.write("abc 123,我们都是好朋友");
string.prototype.dbc2sbc = function (){
return this.replace(/[\uff01-\uff5e]/g,function(a){return string.fromcharcode(a.charcodeat(0)-65248);}).replace(/\u3000/g," ");
}
array扩展函数:
var isnumeric = function(x) { // returns true if x is numeric and false if it is not. var regexp = /^(-)?(\d*)(\.?)(\d*)$/; return string(x).match(regexp); } var myarray = [1,'two',3,'four',5,'six',7,'eight',9,'ten']; var oddarray=myarray.filter(isnumeric); // outputs: 1,3,5,7,9 var oddarray=myarray.some(isnumeric); // outputs: true var oddarray=myarray.every(isnumeric); // outputs: false var printarray =function(x, idx){ document.writeln('['+idx+'] = '+x); } myarray.foreach(printarray);// outputs: [0] = 1 [1] = two [2] = 3 [3] = four [4] = 5 myarray.remove(9); document.writeln(myarray); if (!array.prototype.every) { array.prototype.every = function(fun /*, thisp*/) { var len = this.length; if (typeof fun != "function") throw new typeerror(); var thisp = arguments[1]; for (var i = 0; i < len; i++) { if (i in this && !fun.call(thisp, this[i], i, this)) return false; } return true; }; } if (!array.prototype.filter) { array.prototype.filter = function(fun /*, thisp*/) { var len = this.length; if (typeof fun != "function") throw new typeerror(); var res = new array(); var thisp = arguments[1]; for (var i = 0; i < len; i++) { if (i in this) { var val = this[i]; // in case fun mutates this if (fun.call(thisp, val, i, this)) res.push(val); } } return res; }; } if (!array.prototype.foreach) { array.prototype.foreach = function(fun /*, thisp*/) { var len = this.length; if (typeof fun != "function") throw new typeerror(); var thisp = arguments[1]; for (var i = 0; i < len; i++) { if (i in this) fun.call(thisp, this[i], i, this); } }; } if (!array.prototype.map) { array.prototype.map = function(fun /*, thisp*/) { var len = this.length; if (typeof fun != "function") throw new typeerror(); var res = new array(len); var thisp = arguments[1]; for (var i = 0; i < len; i++) { if (i in this) res[i] = fun.call(thisp, this[i], i, this); } return res; }; } if (!array.prototype.some) { array.prototype.some = function(fun /*, thisp*/) { var len = this.length; if (typeof fun != "function") throw new typeerror(); var thisp = arguments[1]; for (var i = 0; i < len; i++) { if (i in this && fun.call(thisp, this[i], i, this)) return true; } return false; }; } array.prototype.sortnum = function() { return this.sort( function (a,b) { return a-b; } ); } <!-- var tmp = [5,9,12,18,56,1,10,42,'blue',30, 7,97,53,33,30,35,27,30,'35','ball', 'bubble']; var thirty=tmp.find(30); // returns 9, 14, 17 var thirtyfive=tmp.find('35'); // returns 18 var thirtyfive=tmp.find(35); // returns 15 var haveblue=tmp.find('blue'); // returns 8 var notfound=tmp.find('not there!'); // returns false var regexp1=tmp.find(/^b/); // returns 8,20 (first letter starts with b) var regexp1=tmp.find(/^b/i); // returns 8,19,20 (same as above but ignore case) --> array.prototype.find = function(searchstr) { var returnarray = false; for (i=0; i<this.length; i++) { if (typeof(searchstr) == 'function') { if (searchstr.test(this[i])) { if (!returnarray) { returnarray = [] } returnarray.push(i); } } else { if (this[i]===searchstr) { if (!returnarray) { returnarray = [] } returnarray.push(i); } } } return returnarray; }
随机改变数组的排序
array.prototype.shuffle = function (){ for(var rnd, tmp, i=this.length; i; rnd=parseint(math.random()*i), tmp=this[--i], this[i]=this[rnd], this[rnd]=tmp); return this; } <!--var myarray = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]; var yourarray = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]; document.writeln(myarray.compare(yourarray)); // outputs: true;--> array.prototype.compare = function(testarr) { if (this.length != testarr.length) return false; for (var i = 0; i < testarr.length; i++) { if (this[i].compare) { if (!this[i].compare(testarr[i])) return false; } if (this[i] !== testarr[i]) return false; } return true; }
去掉数组中重复的值var a = new array("5","7","7"); a.unique();
array.prototype.unique = function() { var data = this || []; var a = {}; //声明一个对象,javascript的对象可以当哈希表用 for (var i = 0; i < data.length; i++) { a[data[i]] = true; //设置标记,把数组的值当下标,这样就可以去掉重复的值 } data.length = 0; for (var i in a) { //遍历对象,把已标记的还原成数组 this[data.length] = i; } return data; } array.prototype.addall = function($array) { if($array == null || $array.length == 0) return; for(var $i=0; $i<$array.length; $i++) this.push($array[$i]); } array.prototype.contains = function($value) { for(var $i=0; $i<this.length; $i++) { var $element = this[$i]; if($element == $value) return true; } return false; } array.prototype.indexof = function($value) { for(var $i=0; $i<this.length; $i++) { if(this[$i] == $value) return $i; } return -1; } if (!array.prototype.lastindexof) { array.prototype.lastindexof = function(elt /*, from*/) { var len = this.length; var from = number(arguments[1]); if (isnan(from)) { from = len - 1; } else { from = (from < 0) ? math.ceil(from) : math.floor(from); if (from < 0) from += len; else if (from >= len) from = len - 1; } for (; from > -1; from--) { if (from in this && this[from] === elt) return from; } return -1; }; } array.prototype.insertat = function($value, $index) { if($index < 0) this.unshift($value); else if($index >= this.length) this.push($value); else this.splice($index, 0, $value); }
根据数组的下标来删除元素
array.prototype.removebyindex=function($n) { if($n<0){ //如果n<0,则不进行任何操作。 return this; }else{ return this.slice(0,$n).concat(this.slice($n+1,this.length)); } }
依赖indexof
array.prototype.remove = function($value) { var $index = this.indexof($value); if($index != -1) this.splice($index, 1); } array.prototype.removeall = function() { while(this.length > 0) this.pop(); } array.prototype.replace = function($oldvalue, $newvalue) { for(var $i=0; $i<this.length; $i++) { if(this[$i] == $oldvalue) { this[$i] = $newvalue; return; } } } array.prototype.swap = function($a, $b) { if($a == $b) return; var $tmp = this[$a]; this[$a] = this[$b]; this[$b] = $tmp; } array.prototype.max = function() { return math.max.apply({}, this); } array.prototype.min = function() { return math.min.apply({}, this); } array.prototype.splice = function(start, dellen, item){ var len =this.length; start = start<0?0:start>len?len:start?start:0; dellen=dellen<0?0:dellen>len?len:dellen?dellen:len; var arr =[],res=[]; var iarr=0,ires=0,i=0; for(i=0;i<len;i++){ if(i<start|| ires>=dellen) arr[iarr++]=this[i]; else { res[ires++]=this[i]; if(item&&ires==dellen){ arr[iarr++]=item; } } } if(item&&ires<dellen) arr[iarr]=item; for(var i=0;i<arr.length;i++){ this[i]=arr[i]; } this.length=arr.length; return res; } array.prototype.shift = function(){ if(!this) return[];return this.splice(0,1)[0];}
分开添加,关键字shallow copy,如果遇到数组,复制数组中的元素
array.prototype.concat = function(){ var i=0; while(i<arguments.length){ if(typeof arguments[i] === 'object'&&typeof arguments[i].splice ==='function' &&!arguments[i].propertyisenumerable('length')){ // not shallow copy below // array.prototype.concat.apply(this,arguments[i++]); var j=0; while(j<arguments[i].length) this.splice(this.length,0,arguments[i][j++]); i++; } else{ this[this.length]=arguments[i++]; } } return this; } array.prototype.join = function(separator){ var i=0,str=""; while(i<this.length) str+=this[i++]+separator; return str; } array.prototype.pop = function() { return this.splice(this.length-1,1)[0];} array.prototype.push = function(){ array.prototype.splice.apply(this, [this.length,0].concat(array.prototype.slice.apply(arguments))); //这里没有直接处理参数,而是复制了一下 return this.length; } array.prototype.reverse = function(){ for(var i=0;i<this.length/2;i++){ var temp = this[i]; this[i]= this[this.length-1-i]; this[this.length-1-i] = temp; } return this; } array.prototype.slice = function(start, end){ var len =this.length; start=start<0?start+=len:start?start:0; end =end<0?end+=len:end>len?len:end?end:len; var i=start; var res = []; while(i<end){ res.push(this[i++]); } return res; } //arr.unshift(ele1,ele2,ele3....) array.prototype.unshift =function(){ array.prototype.splice.apply(this,[0,0].concat(array.prototype.slice.apply(this,arguments))); }
推荐阅读
-
JavaScript常用字符串与数组扩展函数小结
-
PHP字符串与数组处理函数用法小结
-
JavaScript常用字符串与数组扩展函数小结
-
php filter函数库 (与变量跟类型有关的扩展),可以过滤常用邮件,IP,变量数组等
-
php filter函数库 (与变量跟类型有关的扩展),可以过滤常用邮件,IP,变量数组等
-
php filter函数库 (与变量跟类型有关的扩展),可以过滤常用邮件,IP,变量数组等
-
对JavaScript ES6的常用总结之数组、函数、对象的扩展
-
JavaScript 字符串与数组转换函数[不用split与join]_javascript技巧
-
JavaScript常用字符串与数组扩展函数小结_基础知识
-
对JavaScript ES6的常用总结之数组、函数、对象的扩展