javascript Array 扩展

 

每次测试的时候都要用alert ,弹的烦死了还得点击确定,才能继续测试

1 自己写一个写日志的函数以后测试直接用,当然也可以用   console.log("===自己喜好=");

           	/*
           	* function 写日志的函数
           	*  html 加载结束后在调用这个函数 即放到body下面 
           	*   参数1 logStr 需要写的日志
           	*   参数2 id 写到什么地方   不写这个参数则打印到页面上
           	*/
           	function writeData( logStr ,id   ){
           		if(logStr==null || logStr=='' ) return ;
           		 
           		var logObjId= id==null? "":id ;
           		var logObj =  document.getElementById(logObjId);
           		//如果没有给出日志写到哪里则
           		logObj = logObj||document.getElementsByTagName('body')[0];
           		logObj.innerHTML = logObj.innerHTML + "  "+logStr ;
           	}
 

 

 

最近用数组的时候,发现Array的好多函数有的浏览器不兼容,

参考网上的函数弄来这些扩展函数个,以后就可以兼容使用。

 2 indexOf

//item 需要循环的数组     index 从第几个开始循环 
Array.prototype.indexOf=function(item, index) {
    var n = this.length,
    //判断空
    i = index == null ? 0 : index ;
    //判断负数
    i = i < 0 ? Math.max(0, n + i) : i;
    for (; i < n; i++)
if (i in this && this[i] === item) return i;
    return -1
}

var arrs = ["红",'绿' ,'蓝'];
 
//测试代码 
writeData(  arrs.indexOf(  "蓝" ,5) ,'colorpicker');
 

 

 

 // 从数组中找会后一个匹配的内容

lastIndexOf函数 

// item 需要循环的数组      index 从倒数第几个开始循环  
Array.prototype.lastIndexOf = function(item, index) {
            var n = this.length,
            i = index == null ? n - 1 : index;
            if (i < 0) i = Math.max(0, n + i);
 
            for (; i >= 0; --i){
            writeData(  i + "==  "+this[i] ,'colorpicker1');
              if (i in this && this[i] === item) return i;
           }
              
            return -1
};

var arrs = ["红",'绿' ,'蓝',"红",'绿' ,'蓝'];

writeData(  arrs.lastIndexOf(  "红" , 2 ) ,'colorpicker1');

 

 

 4 forEach 函数 

/*
* fn 回调函数
* thisObj  在那个对象上执行此函数,如果没有则window
*/
Array.prototype.forEach = function(fn, thisObj) {
    var scope = thisObj || window;
    for ( var i=0, j=this.length; i < j; ++i ) {
		//表示在当前这个窗口调用fn函数  给这个函数传 三个参数 
        fn.call(scope, this[i], i, this);
    }
};

var arrs = ["红",'绿' ,'蓝'];
//测试代码 
arrs.forEach(function(  b ,c,d  ){
	writeData(   "  " + b +"   "+c  +"      =========  "+d+"<br>",'colorpicker') ;
	
});

 

 5 every 判断数组中每一个 数据 是否都符合 给定的函数

  

			
                      /*
			* fn 回调函数
			* thisObj  在那个对象上执行此函数,如果没有则window
			*/
			Array.prototype.every = function(fn, thisObj) {
			    var scope = thisObj || window;
			    for ( var i=0, j=this.length; i < j; ++i ) {
			        if ( !fn.call(scope, this[i], i, this) ) {
			            return false;
			        }
			    }
			    return true;
			};
			
 
			//测试代码 
			var arrs =[45,67,88,92,71]; 
			var pass = arrs.every(function( item , index  ){
				//item = parseInt( item ) ;
				if(item < 60 ){
					return false;
				}else{
					return true;
				}
			 });
 			
			writeData( pass+"" ,'colorpicker');

 

 

 

 6 数组中的数据 按照一定规则过滤然后返回新的数组

			/*
			* fn 回调函数 
			* thisObj  在那个对象上执行此函数,如果没有则window 
			* 功能: 遍历数组,把每一个执行的结果放到数组中
			*/
			Array.prototype.map = function(fn, thisObj) {
				    var scope = thisObj || window;
				    var a = [];
				    for ( var i=0, j=this.length; i < j; ++i ) {
				        a.push(fn.call(scope, this[i], i, this));
				    }
				    return a;
			};
 
			//测试代码  把小于0的全都替换成0
			var arrs =[45,67,88,92,-1]; 
			var newArr = arrs.map(function(item, index ){
				 return Math.max(0,item);
			 });
 			
			writeData( newArr+"" ,'colorpicker');

 

   

   7 remove 删除指定的元素

			/*
			* fn 回调函数 
			* 功能:  从数组中删除指定的元素
			*/
			 Array.prototype.remove = function(element) {   
				     for (var i =  this.length; i >=0;i--) {   
				          if (element === this[i])    this.splice(i, 1);   
				     }   
				         return this; 
			 }  
 
			//测试代码  删除元素
			var arrs =[45,67,88,92,-1]; 
			var newArr = arrs.remove( 88 );

 

  8 unique 去除 一样的元素

			/*
			* fn 回调函数 
			* thisObj  在那个对象上执行此函数,如果没有则window 
			* 功能:  把重复的数据去掉
			*/
			Array.prototype.unique=function(){ 
		        var ret = [];
		        o:for(var i = 0, n = this.length; i < n; i++) {
		            for(var x = i + 1 ; x < n; x++) {
		                if(this[x] === this[i])
		                    continue o; 
		            }
		            ret.push(this[i]);
		        }
		        return ret;
		    }
 
			//测试代码  把重复的数据去掉
			var arrs =[45,67,88,92,78,45,45,'技术','技术']; 
			//writeData( newArr+"" ,'colorpicker');
			writeData(  arrs.unique( ) +"" ,'colorpicker');
           //另一种实现方式
            function uniq(array){
                var ret = [],ri = 0
                array = array.sort();
                ret[ri] = array[0];
                 
                for(var j = 1, n = array.length; j < n; j++){
                    if(ret[ri] !== array[j]){
                        ret[++ri] = array[j]
                    }
                }
                return ret;
            } 	

 

 

 9 最大值与最小值

 

    一般写法

 

			/*
			* fn 回调函数 
			* thisObj  在那个对象上执行此函数,如果没有则window 
			* 功能: 取出数组中最大值 与 最小值 
			*/
			Array.prototype.max = function() {
				  var max = this[0];
				  var len = this.length;
				  for (var i = 1; i < len; i++){
				    if (this[i] > max) {
				      max = this[i];
				    }
				  } 
				  return max;
			}
            
			Array.prototype.min = function() {
			  var min = this[0];
			  var len = this.length;
			  for (var i = 1; i < len; i++){
			    if (this[i] < min){
			      	min = this[i];
			    } 
			  } 
			  return min;
			}

                //避免其他类库中含有这个函数的扩展 
           	if (typeof Array.prototype['max'] == 'undefined') {
           	  Array.prototype.max = function() {
           	    //************略*************
           	  }
           	}

  
  网上的大师级别给了另一种实现方法,简介,并且少了函数的创建,减少网络数据的传输量
			/*
			* fn 回调函数 
			* thisObj  在那个对象上执行此函数,如果没有则window 
			* 功能: 取出数组中最大值 与 最小值 
			*/
			Array.prototype.max = function(   ){
			    return Math.max.apply( {}, this );
			};
			 
			Array.prototype.min = function(   ){
			    return Math.min.apply( {}, this );
			};
			
			
			//alert( Array.prototype['max']  );
			if (typeof Array.prototype['max'] == 'undefined') {
				  Array.prototype.max = function() {
 					 
				     // ******略*************
				  }
		    }
 
 10 数组遍历each 实现
	//数组 深度遍历  , 这个函数 是深度递归调用的使用
	//  可以深度递归数组
    Array.prototype.each = function(fn){
		for(var i=0;i<this.length  ; ++i ){
                       //如果是数组 就调用each 不是数组就调用传进来的方法
			this[i].constructor==Array? this[i].each(fn): fn.call( this[i], i );
		}
    }

    // 
	var print = function( obj ,i ){
		writeData(this, 'log' );
	}

    var arrs = [1,2,3,[7,8,9,[10,11,12]],4,5 ];
    arrs.each( print );
 

    

    //数组的遍历
	Array.prototype.each = function(fun){
		if(Array.prototype.foreach){
			//javascript1.6函数
			this.foreach(fun);
		}else{
			for(var i=0, len = this.length ;i<len;i++ ){
				fun(  this[i],i);
			}
		}
	}

 

  11 //数组中包含某个元素

  

	Array.prototype.contains = function (obj) {
	     return this.indexOf(obj) != -1;
	};

 

12 数组的某个位置插入元素 

 

 

	 Array.prototype.insertAt = function (obj, i) {
	     this.splice(i, 0, obj);
	 };

 

13 数组去重 

 

	 function uniq1(array) {
	    var n = array.length;
	    for (var i = 0; i < n - 1; i++)
	        for (var j = i + 1; j < n;)
	            if (array[i] === array[j]) {
	                array.splice(j, 1);
	                n--;
	            }else{
	                j++;
	            }
	    return array;
	}

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值