详解Javascript中的Array扩展

开发 前端
这里我们将介绍Javascript中的Array扩展,希望看完本文之后,能对大家了解Array扩展有所帮助。

Javascript中的Array扩展,一般都是从对象本身入手。这里我们将介绍一些Array对象中的一些东西,比如indexOf是返回元素在数组的索引,没有则返回-1等等。

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

indexOf

返回元素在数组的索引,没有则返回-1。与string的indexOf方法差不多。

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:

Array.prototype.indexOf = function(el, start) {   
    var startstart = start || 0;   
    for ( var i=0; i < this.length; ++i ) {   
        if ( this[i] === el ) {   
            return i;   
       }   
    }   
    return -1;   
};  
var array = [2, 5, 9];   
var index = array.indexOf(2);   
// index is 0   
index = array.indexOf(7);   
// index is -1  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
lastIndexOf

与string的lastIndexOf方法差不多。

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:

Array.prototype.lastIndexOf = function(el, start) {   
    var startstart = start || this.length;   
    if ( start >= this.length ) {   
        start = this.length;   
    }   
   if ( start < 0 ) {   
         start = this.length + start;   
    }   
   for ( var i=start; i >= 0; --i ) {   
        if ( this[i] === el ) {   
          return i;   
      }   
   }   
    return -1;   
};  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
forEach

各类库中都实现相似的each方法。

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:

Array.prototype.forEach = function(fn, thisObj) {   
    var scope = thisObj || window;   
    for ( var i=0j=this.length; i < j; ++i ) {   
        fn.call(scope, this[i], i, this);   
   }   
};  
function printElt(element, index, array) {   
    print("[" + index + "] is " + element); // assumes print is already defined   
}   
[2, 5, 9].forEach(printElt);   
// Prints:   
// [0] is 2   
// [1] is 5   
// [2] is 9  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

every

如果数组中的每个元素都能通过给定的函数的测试,则返回true,反之false。换言之给定的函数也一定要返回true与false

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:

Array.prototype.every = function(fn, thisObj) {   
   var scope = thisObj || window;   
    for ( var i=0j=this.length; i < j; ++i ) {   
        if ( !fn.call(scope, this[i], i, this) ) {   
            return false;   
        }   
    }   
    return true;   
};  
function isBigEnough(element, index, array) {   
  return (element >= 10);   
}   
var passed = [12, 5, 8, 130, 44].every(isBigEnough);   
console.log(passed)   
// passed is false   
passed = [12, 54, 18, 130, 44].every(isBigEnough);   
// passed is true   
console.log(passed)  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
some

类似every函数,但只要有一个通过给定函数的测试就返回true。

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:

Array.prototype.some = function(fn, thisObj) {   
    var scope = thisObj || window;   
    for ( var i=0j=this.length; i < j; ++i ) {   
        if ( fn.call(scope, this[i], i, this) ) {   
            return true;   
       }   
    }   
    return false;   
};  
function isBigEnough(element, index, array) {   
  return (element >= 10);   
}   
var passed = [2, 5, 8, 1, 4].some(isBigEnough);   
// passed is false   
passed = [12, 5, 8, 1, 4].some(isBigEnough);   
// passed is true 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
filter

把符合条件的元素放到一个新数组中返回。

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:

Array.prototype.filter = function(fn, thisObj) {   
    var scope = thisObj || window;   
   var a = [];   
    for ( var i=0j=this.length; i < j; ++i ) {   
       if ( !fn.call(scope, this[i], i, this) ) {   
            continue;   
       }   
        a.push(this[i]);   
    }   
   return a;   
};  
function isBigEnough(element, index, array) {   
  return (element <= 10);   
}   
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
map

让数组中的每一个元素调用给定的函数,然后把得到的结果放到新数组中返回。。

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:

Array.prototype.map = function(fn, thisObj) {   
    var scope = thisObj || window;   
    var a = [];   
   for ( var i=0j=this.length; i < j; ++i ) {   
       a.push(fn.call(scope, this[i], i, this));   
    }   
    return a;   
};  
var numbers = [1, 4, 9];   
var roots = numbers.map(Math.sqrt);   
// roots is now [1, 2, 3]   
// numbers is still [1, 4, 9] 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
reduce

让数组元素依次调用给定函数,***返回一个值,换言之给定函数一定要用返回值。

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:

Array.prototype.reduce = function(fun /*, initial*/)   
{   
  var len = this.length >>> 0;   
 if (typeof fun != "function")   
    throw new TypeError();   
 if (len == 0 && arguments.length == 1)   
   throw new TypeError();   
 var i = 0;   
  if (arguments.length >= 2){   
    var rv = arguments[1];   
  } else{   
   do{   
     if (i in this){   
       rv = this[i++];   
        break;   
     }   
    if (++i >= len)   
        throw new TypeError();   
   }while (true);   
  }   
  for (; i < len; i++){   
   if (i in this)   
     rv = fun.call(null, rv, this[i], i, this);   
  }   
  return rv;   
};  
var total = [0, 1, 2, 3].reduce(function(a, b){ return a + b; });   
// total == 6 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
原文标题:javascript Array扩展

链接:http://www.cnblogs.com/rubylouvre/archive/2009/09/20/1570461.html

【编辑推荐】

  1. JSON是什么?为JavaScript准备的数据格式
  2. 十个最常用的JavaScript自定义函数
  3. 有关JavaScript事件加载的一些延伸思考
  4. JavaScript使用心得汇总:从BOM和DOM谈起
  5. ExtJS在Android模拟器上的运行效果
责任编辑:彭凡 来源: 博客园
相关推荐

2013-05-08 10:36:07

JavaScriptJS详解JavaScrip

2009-03-16 09:16:13

行为扩展WCF.NET

2017-03-20 14:45:42

JavaScript详解

2016-10-11 20:33:17

JavaScriptThisWeb

2016-09-12 17:19:51

JavaScriptArray操作技巧

2010-09-08 15:13:09

Node节点Node属性

2016-12-27 10:19:42

JavaScriptindexOf

2009-10-26 15:07:12

checkbox树

2020-11-18 09:06:02

JavaScript开发技术

2024-04-26 08:27:15

JavaScriptCSSHTML元素

2016-08-12 11:04:17

JavaScript物联网应用

2021-06-25 10:18:08

JavaScript Array.map 巧技拾遗

2009-11-06 13:28:19

Javascript框

2010-10-09 09:56:51

JavaScriptObject对象

2024-08-30 08:35:03

JavaScript切片数组

2014-07-11 09:33:24

iOS 8动作扩展

2010-07-07 18:34:43

UML公共机制

2015-12-24 10:05:39

JavaScripttypeofinstanceof

2021-11-11 14:50:01

JavaScriptarry编程开发

2010-10-09 09:18:14

JavaScriptArray对象
点赞
收藏

51CTO技术栈公众号