數組新增了幾個經典的遍歷篩選等方法,很是方便。能夠避免過渡使用for循環。經過javascript對象的原型擴展能提供一個統一的前端調用接口。javascript
代碼以下:前端
(function(_window){ //數組新增某些方法 //forEach方法從頭至尾遍歷數組,爲每一個數組元素調用指定函數並提供當前元素,當前索引與數組當作參數傳給函數 Array.prototype.forEach||(Array.prototype.forEach=function(fun){ var length=this.length; for(var i=0;i<length;i++){ fun(this[i],i,this); } }) //map方法遍歷數組並調用指定函數,最後返回一個數組,數組由全部函數返回值組成 Array.prototype.map||(Array.prototype.map=function(fun){ var length=this.length; var returnArray=[]; for(var i=0;i<length;i++){ returnArray.push(fun(this[i],i,this)); } return returnArray; }) //filter至關一個數組的帥選器,遍歷數組並調用指定函數,並返回一個新數組,若是函數返回true則添加返回的數組。 Array.prototype.filter||(Array.prototype.filter=function(fun){ var length=this.length; var returnArray=[]; for(var i=0;i<length;i++){ if(fun(this[i],i,this)){ returnArray.push(this[i]); } } return returnArray; }) //every 遍歷數組調用指定函數,當全部函數都返回true 則every返回true不然返回false。 Array.prototype.every||(Array.prototype.every=function(fun){ var length=this.length; if(length==0) return true; //every應該儘早結束循環 for(var i=0;i<length;i++){ if(!fun(this[i],i,this)){ return false; } } return true; }) //some 遍歷數組調用指定函數,當有一個函數返回true就返回true,當全部函數都返回false就返回false Array.prototype.some||(Array.prototype.some=function(fun){ var length=this.length; if(length==0) return false; //some應該儘早結束循環 for(var i=0;i<length;i++){ if(fun(this[i],i,this)){ return true; } } return false; }) //reduce 遍歷數組調用指定函數(函數須要2個參數),每次把調用函數的返回值與下一個元素當作函數參數繼續調用。 //對數組進行求和等操做很實用 Array.prototype.reduce||(Array.prototype.reduce=function(fun,initval){ var length=this.length; if(length==0) return ""; if(length==1){ return initval?fun(initval,this[0]):this[0]; } var val=initval, firstindex=initval?0:2; if(!initval){ val=fun(this[0],this[1]); } for(var i=firstindex;i<length;i++){ val=fun(val,this[i]); } return val; }) //reduceRight 與reduce同樣 只是從右到左遍歷數組 Array.prototype.reduceRight||(Array.prototype.reduceRight=function(fun,initval){ var length=this.length; if(length==0) return ""; if(length==1){ return initval?fun(initval,this[0]):this[0]; } var val=initval, firstindex=initval?length-1:length-3; if(!initval){ val=fun(this[length-1],this[length-2]); } for(var i=firstindex;i>=0;i--){ val=fun(val,this[i]); } return val; }) Array.prototype.indexOf||(Array.prototype.indexOf=function(val){ var length=this.length; if(!length){ return -1; } for(var i=0;i<length;i++){ if(this[i]===val){ return i; } } return -1; }) Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(val){ var length=this.length; if(!length){ return -1; } for(var i=length-1,k=0;i>=0;i--){ k++; if(val===this[i]){ return k; } } return -1; }) Array.prototype.isArray||(Array.prototype.isArray=function(){ return Object.prototype.toString.call(this)==="[object Array]"; }) })(window);