欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JavaScript常用字符串与数组扩展函数小结

程序员文章站 2023-11-13 09:38:58
string对象的扩展函数: string.prototype.trim = function() { return this.replace(/^\...

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))); 
}