`

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

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    JavaScript Array扩展实现代码

    最近看了一下developer.mozilla.org里的东西,发现它为Array对象添加了不少generic method,赶得上Prototype的热心程度。

    javascript string和array常用扩展方法

    javascript string和array常用扩展方法

    JavaScript Array对象扩展indexOf()方法

    背景:JavaScript中Array对象的标准方法中,没有indexOf()方法,可通过下面的代码扩展。 代码如下: if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(elt) { var len = this.length &gt;&gt;&gt; 0; var ...

    JavaScript中扩展Array contains方法实例

    javascript的Array没有contains方法,有时候这会不方便,contains方法实现很简单: 代码如下: function contains(a, obj) {  var i = a.length;  while (i–) {  if (a[i] === obj) {  return true;  }  }  ...

    de1.7 轻量级的javascript扩展函数库

    de.js是一个轻量级的javascript扩展函数库,通过扩展页面元素的方法和属性、和扩展javascript内置类型的方法来帮助web前端开发人员实现更便捷和高效的编程。以下是主要特点: 支持类似jquery的选择器,同时支持类似...

    javascript Array数组对象的扩展函数代码

    今天重点讲下 如何给Array对象扩展 1、直接在Array.prototype 上扩展 2、用自己方法对数组对象进行扩展 直接在Array.prototype上扩展,不能直接对dom对象使用(如:document.getElementsByTagName(‘div’)得到的...

    extarray:Javascript 数组扩展

    ##Javascript 数组扩展 向 js 数组添加了一些函数 array.min() / array.max() :返回值数组的最小值/最大值 array.minBy(prop) / array.maxBy(prop) :返回具有属性prop的对象的最小值/最大值 array.toArray(prop) :...

    IxJS, JavaScript的交互式扩展.zip

    IxJS, JavaScript的交互式扩展 JavaScript的交互式扩展( IxJS ) IxJS是一组库,用于组合同步和异步集合以及在JavaScript文档中使用 Array#extras 风格组合。JavaScript ( IxJS )的交互扩展将

    List.js:一个 javascript 数组扩展库

    一个 javascript 数组扩展库 演示 // Create a new empty list var list = new List ( ) ; // Create a new list based on an array var arr = [ 1 , 2 , 3 ] ; var list = new List ( arr ) ; // Add a value to ...

    javascript数组的扩展实现代码集合

    Array.prototype.del = function(n) { if (n&lt;0 Array.prototype.random = function() u00a0 var nr=[], me&gt;0) { nr[nr.length] = me[t = Math.floor(Math.random() * me.length)];

    源文件程序天下JAVASCRIPT实例自学手册

    源文件程序天下JAVASCRIPT实例自学手册 第1章 JavaScript语言概述 1.1 JavaScript是什么 1.1.1 JavaScript简史 1.1.2 JavaScript有何特点 1.2 JavaScript能做什么 1.2.1 表单数据合法性验证 1.2.2 页面特效 1.2.3 ...

    unwrapped:简单的Javascript DOM扩展和实用程序

    unwrapped.js 以性能为重点的简单Javascript DOM扩展和实用程序。 对于那些jQuery太多的时代。浏览器支持Chrome 42+ Firefox 38+ Internet Explorer 11+ Safari 8+辅助功能id ( id ) // returns Elementclasses ( ...

    func-coffee:功能性咖啡

    功能咖啡将Javascript Array扩展为功能性 ,因此您可以编写更多功能性的Coffeescript代码。原料药特性Array.prototype.head Array.prototype.init Array.prototype.isEmpty Array.prototype.last Array.prototype....

    JavaScript详解(第2版)

     8.5 通过原型扩展对象   8.5.1 使用prototype属性为对象添加属性   8.5.2 原型查找链   8.5.3 使用原型为对象添加方法   8.5.4 所有对象都有的属性和方法   8.5.5 创建子类及继承   8.6 应知应...

    JavaScript中的some()方法使用详解

    JavaScript数组some()方法测试数组中的某个元素...这个方法是一个JavaScript扩展到ECMA-262标准; 因此它可能不存在在标准的其他实现。为了使它工作,你需要添加下面的脚本代码放到顶部: if (!Array.prototype.some

    JavaScript-Objects-Extensions-for-Meteor:Meteor 的有用 JavaScript 对象扩展

    Meteor 的有用对象扩展 日期: Date.now() - 如果 Date 对象没有 now() 方法,则修复...someArray.inArray(needle, searchInKey, searchByKey) - 在 inArray 函数中扩展对象原型 someArray.diff(comparableArray) - 比

Global site tag (gtag.js) - Google Analytics