`

详解JavaScript中的Array扩展

    博客分类:
  • js
阅读更多
Java script中的Array扩展,一般都是从对象本身入手。这里我们将介绍一些Array对象中的一些东西,比如indexOf是返回元素在数组的索引,没有则返回-1等等。

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

indexOf

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

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:
  1. Array.prototype.indexOf = function(el, start) {  
  2.   var startstart = start || 0;   
  3.   for ( var i=0; i < this.length; ++i ) {   
  4.       if ( this[i] === el ) {   
  5.           return i;   
  6.      }   
  7.   }   
  8.   return -1;   
  9. }; 
  10. var array = [2, 5, 9];  
  11. var index = array.indexOf(2);  
  12. // index is 0  
  13. index = array.indexOf(7);  
  14. // index is -1
复制代码
lastIndexOf

与string的lastIndexOf方法差不多。

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:
  1. Array.prototype.lastIndexOf = function(el, start) {  
  2.   var startstart = start || this.length;   
  3.   if ( start >= this.length ) {   
  4.       start = this.length;   
  5.   }   
  6.  if ( start < 0 ) {   
  7.        start = this.length + start;   
  8.   }   
  9.  for ( var i=start; i >= 0; --i ) {   
  10.       if ( this[i] === el ) {   
  11.         return i;   
  12.     }   
  13.  }   
  14.   return -1;   
  15. };

forEach

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

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:
  1. Array.prototype.forEach = function(fn, thisObj) {  
  2.   var scope = thisObj || window;   
  3.   for ( var i=0, j=this.length; i < j; ++i ) {   
  4.       fn.call(scope, this[i], i, this);   
  5.  }   
  6. }; 
  7. function printElt(element, index, array) {  
  8.   print("[" + index + "] is " + element); // assumes print is already defined   
  9. }  
  10. [2, 5, 9].forEach(printElt);  
  11. // Prints:  
  12. // [0] is 2  
  13. // [1] is 5  
  14. // [2] is 9

every

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

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:
  1. Array.prototype.every = function(fn, thisObj) {  
  2.  var scope = thisObj || window;   
  3.   for ( var i=0, j=this.length; i < j; ++i ) {   
  4.       if ( !fn.call(scope, this[i], i, this) ) {   
  5.           return false;   
  6.       }   
  7.   }   
  8.   return true;   
  9. }; 
  10. function isBigEnough(element, index, array) {  
  11.  return (element >= 10);   
  12. }  
  13. var passed = [12, 5, 8, 130, 44].every(isBigEnough);  
  14. console.log(passed)  
  15. // passed is false  
  16. passed = [12, 54, 18, 130, 44].every(isBigEnough);  
  17. // passed is true  
  18. console.log(passed)

some

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

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:
  1. Array.prototype.some = function(fn, thisObj) {  
  2.   var scope = thisObj || window;   
  3.   for ( var i=0, j=this.length; i < j; ++i ) {   
  4.       if ( fn.call(scope, this[i], i, this) ) {   
  5.           return true;   
  6.      }   
  7.   }   
  8.   return false;   
  9. }; 
  10. function isBigEnough(element, index, array) {  
  11.  return (element >= 10);   
  12. }  
  13. var passed = [2, 5, 8, 1, 4].some(isBigEnough);  
  14. // passed is false  
  15. passed = [12, 5, 8, 1, 4].some(isBigEnough);  
  16. // passed is true

filter

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

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:
  1. Array.prototype.filter = function(fn, thisObj) {  
  2.   var scope = thisObj || window;   
  3.  var a = [];   
  4.   for ( var i=0, j=this.length; i < j; ++i ) {   
  5.      if ( !fn.call(scope, this[i], i, this) ) {   
  6.           continue;   
  7.      }   
  8.       a.push(this[i]);   
  9.   }   
  10.  return a;   
  11. }; 
  12. function isBigEnough(element, index, array) {  
  13.  return (element <= 10);   
  14. }  
  15. var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);

map

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

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:
  1. Array.prototype.map = function(fn, thisObj) {  
  2.   var scope = thisObj || window;   
  3.   var a = [];   
  4.  for ( var i=0, j=this.length; i < j; ++i ) {   
  5.      a.push(fn.call(scope, this[i], i, this));   
  6.   }   
  7.   return a;   
  8. }; 
  9. var numbers = [1, 4, 9];  
  10. var roots = numbers.map(Math.sqrt);  
  11. // roots is now [1, 2, 3]  
  12. // numbers is still [1, 4, 9]

reduce

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

如果其他浏览器没有实现此方法,可以用以下代码实现兼容:
  1. Array.prototype.reduce = function(fun /*, initial*/)  
  2. {  
  3.  var len = this.length >>> 0;   
  4. if (typeof fun != "function")  
  5.   throw new TypeError();   
  6. if (len == 0 && arguments.length == 1)  
  7.  throw new TypeError();   
  8. var i = 0;  
  9.  if (arguments.length >= 2){   
  10.   var rv = arguments[1];   
  11.  } else{   
  12.  do{   
  13.    if (i in this){   
  14.      rv = this[i++];   
  15.       break;   
  16.    }   
  17.   if (++i >= len)   
  18.       throw new TypeError();   
  19.  }while (true);   
  20.  }   
  21.  for (; i < len; i++){   
  22.  if (i in this)   
  23.    rv = fun.call(null, rv, this[i], i, this);   
  24.  }   
  25.  return rv;   
  26. }; 
  27. var total = [0, 1, 2, 3].reduce(function(a, b){ return a + b; });  
  28. // total == 6
分享到:
评论

相关推荐

    javascript object array方法使用详解.docx

    ### JavaScript Object Array 方法使用详解 #### 一、引言 在JavaScript开发中,数组(Array)是一类极为常用的数据结构,提供了丰富的内置方法来帮助开发者高效地操作数据。本文将详细介绍Array原型上的方法,并...

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

    在JavaScript的发展过程中,Array对象得到了一系列的扩展,这些扩展增强了数组的操作能力,使得数组的使用更为便捷和强大。 1. forEach()方法:遍历数组中的每个元素,并为每个元素执行一次回调函数。回调函数可以...

    javascript array tutorial

    ### JavaScript 数组教程详解 #### 引言 在JavaScript中,数组是一种强大的数据结构,它允许程序员以一种高效且组织良好的方式存储和操作数据。数组最初并非JavaScript的一部分,在后续版本中才被添加进来,如今...

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

    JavaScript数组some()方法测试数组中的某个元素是否通过由提供的功能来实现测试。 语法 array.some(callback[, thisObject]); 下面是参数的详细信息: callback : 函数用来测试每个元素。 thisObject : 对象作为...

    javascript之Array 数组对象详解

    数组是JavaScript中的一种基础数据结构,它允许我们将一系列的值存储在有序的集合中,每个值称为数组的一个元素。JavaScript数组具有以下特点和操作方法: 1. 创建数组对象: - 使用数组字面量定义数组:如 var ...

    Javascript数组循环遍历之forEach详解

    ### Javascript数组循环遍历之forEach详解 #### 1. JavaScript数组循环遍历基础 在JavaScript中,循环遍历数组是常见的操作,传统的方式是使用for循环,例如: ```javascript var count = arr.length; for(var i ...

    【JavaScript源代码】JavaScript中arguments的使用方法详解.docx

    JavaScript中的`arguments`对象是一个非常重要的特性,尤其在处理不确定数量的函数参数时。它不是一个真正的数组,但具有数组类似的行为,允许我们访问函数调用时传入的所有参数。在这个文档中,我们将深入探讨`...

    详解JavaScript中的every()方法

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

    JavaScript数组详解

    JavaScript数组详解知识点: 1. 数组概念: 在JavaScript中,数组是一种数据结构,用于在单个变量名下存储一系列的值。数组可以包含各种类型的数据,包括数字、字符串、对象等。数组中的每个元素都有一个数字下标(或...

    详解JavaScript编程中的数组结构

    这种通过原型添加新方法的方式,是JavaScript中实现继承和扩展功能的重要机制。 总而言之,JavaScript数组是一种非常灵活和功能强大的数据结构,广泛用于各种程序设计中。它既适合存储简单的数据列表,也可以处理更...

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

    JavaScript数组的 forEach()方法调用数组中的每个元素。 语法 array.forEach(callback[, thisObject]); 下面是参数的详细信息: callback : 函数测试数组的每个元素。 thisObject : 对象作为该执行回调时使用。 ...

    javascript入门教程.docx

    例如,在Node.js环境中,JavaScript也可以用于服务器端编程,这极大地扩展了它的应用场景。 #### 二、引入方式 在HTML文档中嵌入JavaScript有两种主要方式:内部脚本和外部脚本。 1. **内部脚本**:这种方式允许...

    详解JavaScript对象和数组

    下面我们将深入探讨JavaScript中的对象和数组。 1. **对象(Object)** - **封装**:JavaScript对象允许我们将数据和功能(即属性和方法)封装在一起。例如,我们可以创建一个`box`对象,其中包含`name`、`age`属性...

    JavaScript之数组(Array)详解

    ECMAScript中的数组与传统编程语言中的数组不同,它是一个动态的列表,可以保存任何类型的数据,并且数组的大小可以根据需要进行扩展或缩减。 创建数组的方式主要有两种:使用Array构造函数和数组字面量表示法。...

    JavaScript语法手册.rar

    本压缩包文件"JavaScript语法手册.rar"包含了全面的JavaScript语法详解,旨在帮助开发者深入理解和掌握这门语言。 JavaScript语法的基础包括变量、数据类型、操作符和控制结构。变量是存储数据的地方,JavaScript有...

    JavaScript对象模型

    ### JavaScript对象模型详解 #### 一、概述 在JavaScript中,对象模型是其核心特性之一,它决定了数据的存储方式以及程序的运行机制。本文旨在深入解析JavaScript对象模型的关键概念,包括基本数据类型、对象、...

    JavaScript中的splice方法用法详解

    JavaScript中的splice方法是一个非常强大的数组操作工具,它可以用于删除、添加和替换数组中的元素。...对于更复杂的数据操作,考虑使用ES6的扩展运算符(...)或Array.from()来生成新数组也是个好选择。

    JavaScript函数柯里化详解_.docx

    总的来说,柯里化和`bind`都是JavaScript中强大的工具,能够帮助我们编写更灵活、可重用的代码。它们分别在预处理参数和控制函数上下文方面发挥着重要作用,尤其在处理回调函数和构建模块化代码时非常实用。理解并...

    JavaScript数组类型Array相关的属性与方法详解

    JavaScript中的Array类型是编程中最常用的数据结构之一,它允许存储任意类型的值,并且可以动态扩展长度。本篇文章将深入解析Array对象的相关属性和方法。 1. **数组的创建方法** - **数组字面量**:这是最常见也...

Global site tag (gtag.js) - Google Analytics