大多数方法的第一个参数接收一个函数,并且对数组的每个元素调用一次该函数。如果是稀疏数组,对不存在的元素不调用传递的函数。在大多数情况下,调用提供的函数使用三个参数:数组元素,元素的索引,数组本身,通常情况只提供第一个参数,忽略后两个参数。

第二个参数是可选的,如果有第二个参数,则调用的函数被看做是第二个参数的方法,即在调用函数内使用this代表的是第二个参数。

数组方法是不会修改它们调用的原数组。当然,传递给这些方法的函数可以修改这些数组。

forEach():

方法从头至尾遍历数组,为每个元素调用指定的函数

注意:无法在所有元素都传递给调用的函数之前终止遍历(就是不能break or return)。

map():

数组的每一个元素传递给指定的函数,并返回一个数组,它包含该函数的返回值。

filter():

方法返回的数组元素是调用的数组的一个子集。传递函数是用来逻辑判定的即该函数返回true或false。filter会跳过稀疏数组中缺少的元素,它的返回数组总是稠密的,即压缩稀疏数组的空缺:

var dense = sparse.filter(function(){return false});

压缩空缺并删除undefined和null元素,可以这样使用filter():

  a  = a.filter(function(x){ return x!=undefined && x!=null});

every()和some():

是数组的逻辑判定:它们对数组元素应用指定的函数判定,返回true或false

every()方法就像数学中的“针对所有”:当且仅当对数组中的所有元素调用判定函数都返回true。

some()方法就像数学中的“存在”量词,当数组中至少有一个元素调用判定函数返回true。则判定函数返回true。并且仅当数值中的所有元素都返回false,它才返回false。

reduce()和reduceRight():

使用指定的函数将数组元素进行组合,生成单个值。这在函数式编程中是常见的操作,也可以称为“注入”和“折叠”如下:

var a = [1,2,3,4,5];

var sum = a.reduce(function(x,y){return x+y},0); //数组求和

var product = a.reduce(function(x,y){return x*y},1); //数组求积

var max = a.reduce(function(x,y){return x>y?x:y;}); //求最大值

reduce()需要两个参数。第一个是执行简化操作的函数。化简函数的任务就是用某种方法把两个值组合或化简为一个值,并返回化简后的值。第二个可选参数是一个传递给函数的初始值。简化操作函数,与上面提到的forEach和map使用的函数不同,比较熟悉的“数组元素”,“元素的索引”,“数组本身”将作为第2~4个参数传递给函数。第一个参数是到目前为止的化简操作累积的结果。第一次调用函数时,第一个参数是一个初始值即传递给reduce()的第二个参数。如上面描述,求max时没有使用第二个参数(即没有指定初始值)。当不指定初始值调用reduce()时,它将使用数组的第一个元素作为初始值。这意味着第一次调用简化函数就使用了第一个和第二个数组元素作为其第一个参数和第二个参数。

如果不带初始值参数调用reduce()将导致类型错误异常;

如果调用时只有一个值,数组只有一个元素并且没有指定初始值,或有一个空数组并指定一个初始值。reduce()只是简单地返回那个值而不会调用简化函数。

值得注意的是:every()和some()方法是一种类型的数组化简操作。但是不同的是,它们会尽早终止遍历而不总是访问每一个数组元素。

注意:数学计算不是reduce()和reduceRight()的唯一意图。参考前面提到的属性枚举时看到的一个例子

/*返回一个新对象,这个对象同时拥有o的属性和p的属性,如果o和p中有重名属性,使用p中的属性*/

function union(o,p){
return extend(extend({},o),p); } function extend(o,p){ for(prop in p){ o[prop] = p[prop]; } return o; } var objects = [{x:1},{y:2},{z:3}]; var mered = objects.reduce(union); //=>{x:1,y:2,z:3}

reduceRight工作原理与 reduce()一样,不同的是它按照数组索引从高到低处理数组

ECMAScript5提供了9个新数组方法:遍历、映射、过滤、检测、简化、和搜索数组的更多相关文章

  1. JavaScript学习笔记之 数组方法一 堆栈 和队列

    数组的方法 以及 堆栈的操作的方法 JavaScript是一种弱类型语言,不像其它程序语言需要严格定义数据类型.在JavaScript中数组可以任意修改变动,这样也就出现了一个问题,如果边遍历数组边操 ...

  2. ECMAScript 5中新增的数组方法

    ECMAScript 5中定义了9个新的数组方法,用于遍历.映射.过滤.检测.简化和搜索数组. 在开始介绍之前,很有必要对这几个新增的数组方法做一个概述.首先,大多数方法的第一个参数接收一个函数,并且 ...

  3. 《JS权威指南学习总结--7.9 ES5中的数组方法》

    内容要点: ES5中定义了9个新的数组方法来遍历.映射.过滤.检测.简化和搜索数组. 概述:首先,大多数方法的第一个参数接收一个函数,并且对数组的每个元素(或一个元素)调用一次该函数. 如果是稀疏数组 ...

  4. 【译】你应该了解的JavaScript数组方法

    让我们来做一个大胆的声明:for循环通常是无用的,而且还导致代码难以理解.当涉及迭代数组.查找元素.或对其排序或者你想到的任何东西,都可能有一个你可以使用的数组方法. 然而,尽管这些方法很有用,但是其 ...

  5. 25个JavaScript数组方法代码示例

    摘要: 通过代码掌握数组方法. 原文:通过实现25个数组方法来理解及高效使用数组方法(长文,建议收藏) 译者:前端小智 Fundebug经授权转载,版权归原作者所有. 要在给定数组上使用方法,只需要通 ...

  6. JavaScript数组方法--every、some、fill

    接上一篇,JavaScript数组方法--concat.push,继续其他的数组方法. every:every() 方法测试数组的所有元素是否都通过了指定函数的测试. 先看其使用方法: functio ...

  7. JavaScript 数组方法

    数组方法: 1.Array.join([param]) 方法:将数组中所有的元素都转换为字符串并连接起来,通过字符 param 连接,默认使用逗号,返回最后生成的字符串 2.Array.reverse ...

  8. JavaScript数组方法详解

    JavaScript数组方法详解 JavaScript中数组的方法种类众多,在ES3-ES7不同版本时期都有新方法:并且数组的方法还有原型方法和从object继承的方法,这里我们只介绍数组在每个版本中 ...

  9. JavaScript数组方法大集合

    JavaScript数组方法集合 本文总结一下js数组处理用到的所有的方法.自己做个笔记. 数组方法 concat() 合并两个或多个数组 concat()能合并两个或者多个数组,不会更改当前数组,而 ...

随机推荐

  1. 使用canvas实现画中画效果的H5

    最近看到一个挺有趣的H5,主要效果就是通过不断的放缩来展示画中画,网上找了一下并没有这方面的实现代码,故决定原创一下,并分享出来 主要的思路就是通过canvas不断的写入图片,考虑到每一层的图片的位置 ...

  2. 2016级算法第二次上机-E.AlvinZH的儿时梦想——运动员篇

    862-AlvinZH的儿时梦想--运动员篇 思路 难题. 应该想到,不管给出的数据如何,每一个淘汰的人不会对最终答案产生任何影响,所以每次淘汰就把人除掉就可以了,最后剩下的两个人计算它们从开始到相遇 ...

  3. HTML-★★★★JavaScript的DOM操作★★★★-重点部分

    Window.document 对象 一.找到元素 document.getElementById("id"); 根据id找,最多找一个: var a = document.get ...

  4. (STM32F4) SysTick理解使用

    關於Cortex System Timer (Systick) 網上隨便google就可以找到許多相關範例. 他就是ARM提供的一個24-bit的下數(count-down)計時器我看大部分應用都是提 ...

  5. [原创] Shell 参数传递 与 默认值

    目录 简介 基本传参 $* 与 $@ 区别 默认参数(变量默认值) if 繁琐方式 - 变量为null = 变量为null时, 同时改变变量值 :- 变量为null 或 空字符串 := 变量为null ...

  6. MYSQL ERROR 1049 (42000): Unknown database

    https://www.cnblogs.com/hedgehog105/p/10196566.html lower_case_table_names=2

  7. 苹果Air A1466进入系统黑屏

    现象:苹果Air A1466笔记本安装Windows 7系统后,安装官网对应型号的bootcamp后,重启机器,在Windows滚动条完成后随即进入黑屏状态,安全模式能够进入,在安全模式下卸载删除显卡 ...

  8. supervisor使用小记

    最近使用supervisor部署爬虫,百度了很多,磕磕绊绊自己也算是用起来了,以下是整理的使用情况. 第一步: 下载安装supervisor 使用的ubuntu16.04,直接 sudo apt-ge ...

  9. 转 RMAN: RAC Backup, Restore and Recovery using RMAN

    PURPOSE The purpose of this document is to give a quick guide for using RMAN on RAC databases. We wi ...

  10. [转]矩阵树$Matrix-Tree$定理与行列式

    [https://www.cnblogs.com/zj75211/p/8039443.html][矩阵树Matrix-Tree定理与行列式]