`
libmw
  • 浏览: 7115 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
最近访客 更多访客>>
社区版块
存档分类
最新评论

Array对象扩展

阅读更多
虽然现在各大高级浏览器都支持了数组对象的扩展方法,例如some,forEach等,但是为了兼容各低端浏览器,流行框架会添加自己的支持方法,下面列出常用的一些扩展:
	<script>
		Array.prototype.indexOf = function(item, fromIdx){
			var length = this.length;
				fromIdx = fromIdx == null ? 0 : fromIdx < 0 ? Math.max(0, fromIdx + length) : fromIdx;
			for(; fromIdx < length; fromIdx++){
				if(fromIdx in this && this[fromIdx] === item){
					return fromIdx;
				}
			}
			return -1;
		}

		Array.prototype.lastIndexOf = function(item, fromIdx){
			var length = this.length;
				fromIdx = fromIdx == null ? length -1 : fromIdx < 0 ? Math.max(0, fromIdx + length) : fromIdx;
			for(; fromIdx > -1; fromIdx--){
				if(fromIdx in this && this[fromIdx] === item){
					return fromIdx;
				}
			}
			return -1;
		}

		Array.prototype.forEach = function(callback, thisObj){
			thisObj =  thisObj || window;
			for(var i = 0, len = this.length; i < len; i++){
				callback.call(thisObj, this[i], i, this);
			}
		}

		Array.prototype.every = function(callback, thisObj){
			thisObj =  thisObj || window;
			for(var i = 0, len = this.length; i < len; i++){
				if(!callback.call(thisObj, this[i], i, this)){
					return false;
				}				
			}
			return true;
		}

		Array.prototype.some = function(callback, thisObj){
			thisObj = thisObj || window;
			for(var i = 0,len = this.length; i < len; i++){
				if(callback.call(thisObj, this[i], i , this)){
					return true;
				}
			}
			return false;
		}

		Array.prototype.filter = function(callback, thisObj){
			var arr = [];
			thisObj = thisObj || window;
			for(var i = 0,len = this.length; i < len; i++){
				if(callback.call(thisObj, this[i], i , this)){
					arr.push(this[i]);
				}
			}
			return arr;
		}

		Array.prototype.map = function(callback, thisObj){
			thisObj =  thisObj || window;
			for(var i = 0, len = this.length; i < len; i++){
				callback.call(thisObj, this[i], i, this);
			}
		}

		Array.prototype.reduce = function(callback, initVal){
			var i = 0, len = this.length;
			if(!initVal){ //没有初始值则寻找arr里第一个值
				for(;i < len; i++){
					if(i in this){
						initVal = this[i];break;
					}
				}
				if(!initVal){
					throw new Error('no reduce element');
				}
			}
			for(; i < len; i++){
				if(i in this)
					initVal = callback.call(null, initVal, this[i], i, this);
			}
			return initVal;
		}

		Array.prototype.remove = function(obj){//逆序移除 避免splice的时候重置i
			for(var i = this.length - 1; i >= 0; i--){
				if(this[i] === obj){
					this.splice(i, 1);
				}
			}
			return this;
		} 

		Array.prototype.unique = function(){
			for(var i = this.length - 1; i >= 0; i--){
				for(var j = i - 1; j >= 0; j--){
					if(this[i] === this[j]){
						this.splice(j, 1);
						i--;
					}
				}
			}
			return this;
		}

		Array.prototype.unique2 = function(){
			this.sort();
			for(var i = this.length - 1; i > 0; i--){
				if(this[i] === this[i - 1]){
					this.splice(i, 1);
				}
			}
			return this;
		}
	</script>
分享到:
评论

相关推荐

    JavaScript Array对象扩展indexOf()方法

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

    详解JS中Array对象扩展与String对象扩展

    标题所指的知识点主要分为两个部分:JS中Array对象的扩展和String对象的扩展。以下是对这两部分内容的详细阐述。 一、Array对象的扩展 Array对象是JavaScript中最为重要的对象之一,用于表示数组,即有序的列表。...

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

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

    Prototype Array对象 学习

    它提供的Array对象扩展,就包含了诸多方便操作数组的方法,这些方法极大地简化了数组的处理工作。 在Prototype扩展的Array对象中,提供了一些非常实用的方法,比如`each`、`clear`、`first`、`last`、`compact`、`...

    js Array对象的扩展函数代码

    本文将介绍如何扩展Array对象的一些常用函数,包括`filter`、`every`、`forEach`、`map`和`some`。 首先,`filter`函数用于创建一个新数组,新数组中的元素是通过所提供函数实现的测试的所有元素。在给定的代码示例...

    JQuery_1.4_API.CHM和Prototype.js 1.6.0.3

    6. **Array对象扩展**: `Array.prototype.each()`, `Array.prototype.map()`, `Array.prototype.detect()`等方法提供了数组操作的便利。 7. **Event对象**: Prototype 对事件处理进行了封装,如`Event.observe()`, `...

    javascript Prototype 对象扩展.docx

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

    收集的一些Array及String原型对象的扩展实现代码

    首先来看Array对象的扩展方法: 1. 删除数组中的指定位置元素。通过定义Array.prototype.del方法,可以指定要删除元素的位置。该方法接受一个参数n,表示要删除的元素的位置索引,如果n小于0,则不做任何操作并返回...

    Array的workshop操作和扩展

    在这个“Array的workshop操作和扩展”主题中,我们将深入探讨数组的操作及其在Java中的扩展,同时也会触及链表的实现与存储管理。 首先,数组是一种线性数据结构,它在内存中连续存储同一类型的数据元素。数组的...

    JavaScript数组对象Array.pdf

    JavaScript中的Array对象是编程语言中处理有序数据集合的关键部分,它允许你在单个变量中存储多个值。在JavaScript中,数组是一种动态数据结构,这意味着在创建后,你可以随时添加、删除或修改数组的元素。 创建...

    ES5 ES6中Array对象去除重复项的方法总结

    在上面的代码中,我们使用 `Set` 对象来去除重复项,然后使用 `Array.from` 方法或扩展运算符来将 `Set` 对象转换成数组。 总结 在 ES5 和 ES6 中,我们可以使用不同的方法来去除 Array 对象中的重复项。在 ES5 中...

    ASP.NET AJAX深入浅出系列课程(7):Microsoft AJAX Library对于JavaScript原生对象的扩展(上)

    首先,我们来看Array对象的扩展。在Microsoft AJAX Library中,Array对象新增了诸如forEach、each、map、filter、some和every等方法,这些都是基于ECMAScript 5标准的迭代函数。这些新方法提供了更强大的数组操作...

    ASP.NET AJAX深入浅出系列课程(8):Microsoft AJAX Library对于JavaScript原生对象的扩展(下)

    1. **Array对象的扩展**:微软AJAX库为JavaScript的Array对象添加了一些实用方法,如`indexOf()`和`lastIndexOf()`,这些方法在JavaScript早期版本中并不支持,但它们在处理数组时非常有用,能够帮助开发者更高效地...

    JS 操作Array数组的方法及属性实例解析

    对于Array对象,我们可以通过修改`Array.prototype`来扩展数组的功能。例如,可以定义一个新的方法如`array_max()`,然后将其添加到`Array.prototype`上,这样所有的数组实例都能调用这个方法。在示例中,`array_max...

    本地对象Array的原型扩展实现代码

    Array对象的原型扩展是JavaScript编程中一种增强数组功能的方式,它允许我们为数组添加自定义的方法。在这个场景下,我们关注的是如何通过原型扩展实现一个功能,即删除数组中的重复项,并返回一个新的数组,该数组...

    ES6 Array常用扩展的应用实例分析

    ES6(ECMAScript 2015)对JavaScript的核心语言做了大量增强,其中包括对Array对象的扩展,提供了许多新的方法,提高了数组操作的灵活性和效率。本文将详细介绍ES6 Array常用扩展的应用实例,通过实例分析各种扩展...

Global site tag (gtag.js) - Google Analytics