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 相关文章推荐
用Javascript做flash做的事..才完成的一个类.Auntion Action var 0.1
Feb 23 Javascript
jQuery的运行机制和设计理念分析
Apr 05 Javascript
js setTimeout opener的用法示例详解
Oct 23 Javascript
JavaScript中使用arguments获得函数传参个数实例
Aug 27 Javascript
详解AngularJS过滤器的使用
Mar 11 Javascript
JS验证图片格式和大小并预览的简单实例
Oct 11 Javascript
探索Vue.js component内容实现
Nov 03 Javascript
jquery实现tab键进行选择后enter键触发click行为
Mar 29 jQuery
vue-cli中的webpack配置详解
Sep 25 Javascript
javaScript手机号码校验工具类PhoneUtils详解
Dec 08 Javascript
js实现经典贪吃蛇小游戏
Mar 19 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
Dec 15 Vue.js
网页中返回顶部代码(多种方法)另附注释说明
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
PHP自定session保存路径及删除、注销与写入的方法
2014/11/18 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
火狐4、谷歌12不支持Jquery Validator的解决方法分享
2011/06/20 Javascript
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
javascript 操作符(~、&amp;、|、^、)使用案例
2014/12/31 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
Bootstrap源码解读模态弹出框(11)
2016/12/28 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
javascript将list转换成树状结构的实例
2017/09/08 Javascript
详解javascript中的变量提升和函数提升
2018/05/24 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
js实现带搜索功能的下拉框
2020/01/11 Javascript
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
Vue封装Axios请求和拦截器的步骤
2020/09/16 Javascript
Antd的table组件表格的序号自增操作
2020/10/27 Javascript
vue 使用class创建和清除水印的示例代码
2020/12/25 Vue.js
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
[01:01:36]Optic vs paiN 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python列表操作使用示例分享
2014/02/21 Python
详解Python中的序列化与反序列化的使用
2015/06/30 Python
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
Python中os模块功能与用法详解
2020/02/26 Python
Python3爬虫中Selenium的用法详解
2020/07/10 Python
python 实现的IP 存活扫描脚本
2020/12/10 Python
海飞丝的广告词
2014/03/20 职场文书
员工廉洁自律承诺书
2014/05/26 职场文书
理财计划书
2014/08/14 职场文书
交通事故和解协议书
2015/01/27 职场文书
世界文化遗产导游词
2015/02/13 职场文书
2015年毕业实习工作总结
2015/05/29 职场文书
优秀团员主要事迹材料
2015/11/05 职场文书
Java Spring Boot请求方式与请求映射过程分析
2022/06/25 Java/Android