`

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扩展实现代码

    在JavaScript中,Array对象是处理数组数据的关键部分,而Array扩展则是为了让开发者能够更加方便地操作数组,提供了许多实用的方法。在本文中,我们将探讨几个常见的JavaScript Array扩展,包括`indexOf`、`...

    javascript string和array常用扩展方法

    javascript string和array常用扩展方法

    JavaScript实现Array(数组)和Map

    `array.js` 文件可能包含了对数组操作的一些自定义函数或者扩展,例如可能实现了数组去重、查找指定元素的索引、排序等功能。这些功能可以通过阅读源码来了解其具体的实现方式和用途。 接着,Map是ES6中新增的一种...

    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 tutorial

    本文将详细介绍JavaScript数组的基本功能及其一些有用的扩展用法。 #### 数组的概念 数组本质上是一系列变量的有序集合。通过使用数组,可以替代传统的声明多个单独变量的方式,使得代码更加简洁易读。例如: ```...

    JavaScript中扩展Array contains方法实例

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

    JavaScript 实现Array(数组)和Map

    在JavaScript编程中,Array和Map是两种非常重要的数据结构,它们各自有其独特的作用和应用场景。Array主要用于存储一组有序的元素,而Map则提供了一种键值对的存储方式,适用于关联不同类型的值。 Array(数组)是...

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

    标题提到的“javascript Array数组对象的扩展函数代码”就是关于如何给Array对象添加额外的方法,以实现更便捷的操作。描述中提到了“去除字符串空格”和“数组排序”,这些都是常见的数组操作。 首先,我们来讨论...

    WebKit中JsCore的扩展方法.pdf

    在JavaScript中,有许多内置对象如Array、Date和String等,它们提供了JavaScript的强大功能。在WebKit的源代码中,这些内置对象对应着不同的_Object.cpp文件,例如Math对应Math-Object.cpp,String对应String-Object...

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

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

    javascript object array方法使用详解.docx

    本文将详细介绍Array原型上的方法,并探讨如何将这些方法应用于普通的JavaScript对象(Object),以此扩展对象的功能,使其具备类似于数组的行为特性。 #### 二、Array 原型方法概述 ##### 2.1 `push` `Array....

    JavaScript数组对象Array.pdf

    2. `prototype`属性:这是所有JavaScript对象都具有的属性,用于扩展对象的方法。例如,你可以通过`Array.prototype`自定义一个方法,使得所有的数组实例都能使用这个新方法。以下是一个示例,定义了一个名为`outAll...

    Javascript数组Array操作整理[定义].pdf

    JavaScript中的数组Array是编程中非常基础且重要的数据结构,它用于存储一组有序的元素,可以是任意类型。本文主要探讨JavaScript数组的两个关键属性:`length`和`prototype`。 首先,`length`属性是每个JavaScript...

    extarray:Javascript 数组扩展

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

    js代码-JavaScript Array 对象定义和添加元素

    JavaScript中的Array对象是用于存储有序数据的集合,它允许我们以灵活的方式处理一系列的数据项。在JavaScript中,数组可以包含任何类型的数据,包括数字、字符串甚至是其他对象。本篇文章将详细探讨JavaScript ...

    javascript Prototype 对象扩展.docx

    ### JavaScript Prototype 对象扩展 #### 一、简介与背景 在JavaScript中,`prototype`是一个非常重要的概念,尤其是在面向对象编程(OOP)方面。通过利用`prototype`,开发者能够更高效地管理对象间的共享属性和...

Global site tag (gtag.js) - Google Analytics