虽然现在各大高级浏览器都支持了数组对象的扩展方法,例如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()方法,可通过下面的代码扩展。 代码如下: if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(elt) { var len = this.length >>> 0; var ...
标题所指的知识点主要分为两个部分:JS中Array对象的扩展和String对象的扩展。以下是对这两部分内容的详细阐述。 一、Array对象的扩展 Array对象是JavaScript中最为重要的对象之一,用于表示数组,即有序的列表。...
今天重点讲下 如何给Array对象扩展 1、直接在Array.prototype 上扩展 2、用自己方法对数组对象进行扩展 直接在Array.prototype上扩展,不能直接对dom对象使用(如:document.getElementsByTagName(‘div’)得到的...
它提供的Array对象扩展,就包含了诸多方便操作数组的方法,这些方法极大地简化了数组的处理工作。 在Prototype扩展的Array对象中,提供了一些非常实用的方法,比如`each`、`clear`、`first`、`last`、`compact`、`...
本文将介绍如何扩展Array对象的一些常用函数,包括`filter`、`every`、`forEach`、`map`和`some`。 首先,`filter`函数用于创建一个新数组,新数组中的元素是通过所提供函数实现的测试的所有元素。在给定的代码示例...
6. **Array对象扩展**: `Array.prototype.each()`, `Array.prototype.map()`, `Array.prototype.detect()`等方法提供了数组操作的便利。 7. **Event对象**: Prototype 对事件处理进行了封装,如`Event.observe()`, `...
### JavaScript Prototype 对象扩展 #### 一、简介与背景 在JavaScript中,`prototype`是一个非常重要的概念,尤其是在面向对象编程(OOP)方面。通过利用`prototype`,开发者能够更高效地管理对象间的共享属性和...
首先来看Array对象的扩展方法: 1. 删除数组中的指定位置元素。通过定义Array.prototype.del方法,可以指定要删除元素的位置。该方法接受一个参数n,表示要删除的元素的位置索引,如果n小于0,则不做任何操作并返回...
在这个“Array的workshop操作和扩展”主题中,我们将深入探讨数组的操作及其在Java中的扩展,同时也会触及链表的实现与存储管理。 首先,数组是一种线性数据结构,它在内存中连续存储同一类型的数据元素。数组的...
JavaScript中的Array对象是编程语言中处理有序数据集合的关键部分,它允许你在单个变量中存储多个值。在JavaScript中,数组是一种动态数据结构,这意味着在创建后,你可以随时添加、删除或修改数组的元素。 创建...
在上面的代码中,我们使用 `Set` 对象来去除重复项,然后使用 `Array.from` 方法或扩展运算符来将 `Set` 对象转换成数组。 总结 在 ES5 和 ES6 中,我们可以使用不同的方法来去除 Array 对象中的重复项。在 ES5 中...
首先,我们来看Array对象的扩展。在Microsoft AJAX Library中,Array对象新增了诸如forEach、each、map、filter、some和every等方法,这些都是基于ECMAScript 5标准的迭代函数。这些新方法提供了更强大的数组操作...
1. **Array对象的扩展**:微软AJAX库为JavaScript的Array对象添加了一些实用方法,如`indexOf()`和`lastIndexOf()`,这些方法在JavaScript早期版本中并不支持,但它们在处理数组时非常有用,能够帮助开发者更高效地...
对于Array对象,我们可以通过修改`Array.prototype`来扩展数组的功能。例如,可以定义一个新的方法如`array_max()`,然后将其添加到`Array.prototype`上,这样所有的数组实例都能调用这个方法。在示例中,`array_max...
Array对象的原型扩展是JavaScript编程中一种增强数组功能的方式,它允许我们为数组添加自定义的方法。在这个场景下,我们关注的是如何通过原型扩展实现一个功能,即删除数组中的重复项,并返回一个新的数组,该数组...
ES6(ECMAScript 2015)对JavaScript的核心语言做了大量增强,其中包括对Array对象的扩展,提供了许多新的方法,提高了数组操作的灵活性和效率。本文将详细介绍ES6 Array常用扩展的应用实例,通过实例分析各种扩展...