js Array对象的扩展函数代码


Posted in Javascript onApril 24, 2013

使用

<script language=javascript>
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 相关文章推荐
HTML-CSS群中单选引发的“事件”
Mar 05 Javascript
Jquery.Form 异步提交表单的简单实例
Mar 03 Javascript
详解Bootstrap四种图片样式
Jan 04 Javascript
jquery显示隐藏元素的实现代码
May 19 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
Dec 18 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
Jan 14 Javascript
javascript图片预览和上传(兼容IE)
Mar 15 Javascript
详谈JS中数组的迭代方法和归并方法
Aug 11 Javascript
js模块加载方式浅析
Aug 12 Javascript
分享5个顶级的JavaScript Ajax组件库
Sep 16 Javascript
解决vue单页面修改样式无法覆盖问题
Aug 05 Javascript
详解微信小程序开发之formId使用(模板消息)
Aug 27 Javascript
网页中返回顶部代码(多种方法)另附注释说明
Apr 24 #Javascript
onkeypress字符按键兼容所有浏览器使用介绍
Apr 24 #Javascript
纯JS实现五子棋游戏兼容各浏览器(附源码)
Apr 24 #Javascript
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
Apr 24 #Javascript
基于jQuery实现图片的前进与后退功能
Apr 24 #Javascript
查看图片(前进后退)功能实现js代码
Apr 24 #Javascript
jQuery判断密码强度实现思路及代码
Apr 24 #Javascript
You might like
模拟OICQ的实现思路和核心程序(一)
2006/10/09 PHP
php异常处理技术,顶级异常处理器
2012/06/13 PHP
php 不使用js实现页面跳转
2014/02/11 PHP
php去除字符串换行符示例分享
2014/02/13 PHP
PHP实现的DES加密解密实例代码
2016/04/06 PHP
js 跨域和ajax 跨域问题小结
2009/07/01 Javascript
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
网页中可关闭的漂浮窗口实现可自行调节
2013/08/20 Javascript
js获取日期:昨天今天和明天、后天
2014/06/11 Javascript
用JavaScript实现使用鼠标画线的示例代码
2014/08/19 Javascript
JS获取各种宽度、高度的简单介绍
2014/12/19 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
2015/12/04 Javascript
javascript实现的猜数小游戏完整实例代码
2016/05/10 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
浅析如何利用angular结合translate为项目实现国际化
2016/12/08 Javascript
微信小程序开发之Tabbar实例详解
2017/01/09 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
vue-cli3 引入 font-awesome的操作
2020/08/11 Javascript
JS实现炫酷雪花飘落效果
2020/08/19 Javascript
Python中除法使用的注意事项
2014/08/21 Python
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
python 2.7.14安装图文教程
2018/04/08 Python
python elasticsearch从创建索引到写入数据的全过程
2019/08/04 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
英国在线自行车商店:Evans Cycles
2016/09/26 全球购物
澳大利亚珠宝商:Shiels
2019/10/06 全球购物
车间操作工岗位职责
2013/12/19 职场文书
实习指导老师评语
2014/04/26 职场文书
毕业生工作求职信
2014/06/30 职场文书
安全在我心中演讲稿
2014/09/01 职场文书
2015年护理工作总结范文
2015/04/03 职场文书
python简单验证码识别的实现过程
2021/06/20 Python
CSS实现单选折叠菜单功能
2021/11/01 HTML / CSS
Springboot中如何自动转JSON输出
2022/06/16 Java/Android