ECMAScript5提供了9个新数组方法:遍历、映射、过滤、检测、简化、和搜索数组
大多数方法的第一个参数接收一个函数,并且对数组的每个元素调用一次该函数。如果是稀疏数组,对不存在的元素不调用传递的函数。在大多数情况下,调用提供的函数使用三个参数:数组元素,元素的索引,数组本身,通常情况只提供第一个参数,忽略后两个参数。
第二个参数是可选的,如果有第二个参数,则调用的函数被看做是第二个参数的方法,即在调用函数内使用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个新数组方法:遍历、映射、过滤、检测、简化、和搜索数组的更多相关文章
- JavaScript学习笔记之 数组方法一 堆栈 和队列
数组的方法 以及 堆栈的操作的方法 JavaScript是一种弱类型语言,不像其它程序语言需要严格定义数据类型.在JavaScript中数组可以任意修改变动,这样也就出现了一个问题,如果边遍历数组边操 ...
- ECMAScript 5中新增的数组方法
ECMAScript 5中定义了9个新的数组方法,用于遍历.映射.过滤.检测.简化和搜索数组. 在开始介绍之前,很有必要对这几个新增的数组方法做一个概述.首先,大多数方法的第一个参数接收一个函数,并且 ...
- 《JS权威指南学习总结--7.9 ES5中的数组方法》
内容要点: ES5中定义了9个新的数组方法来遍历.映射.过滤.检测.简化和搜索数组. 概述:首先,大多数方法的第一个参数接收一个函数,并且对数组的每个元素(或一个元素)调用一次该函数. 如果是稀疏数组 ...
- 【译】你应该了解的JavaScript数组方法
让我们来做一个大胆的声明:for循环通常是无用的,而且还导致代码难以理解.当涉及迭代数组.查找元素.或对其排序或者你想到的任何东西,都可能有一个你可以使用的数组方法. 然而,尽管这些方法很有用,但是其 ...
- 25个JavaScript数组方法代码示例
摘要: 通过代码掌握数组方法. 原文:通过实现25个数组方法来理解及高效使用数组方法(长文,建议收藏) 译者:前端小智 Fundebug经授权转载,版权归原作者所有. 要在给定数组上使用方法,只需要通 ...
- JavaScript数组方法--every、some、fill
接上一篇,JavaScript数组方法--concat.push,继续其他的数组方法. every:every() 方法测试数组的所有元素是否都通过了指定函数的测试. 先看其使用方法: functio ...
- JavaScript 数组方法
数组方法: 1.Array.join([param]) 方法:将数组中所有的元素都转换为字符串并连接起来,通过字符 param 连接,默认使用逗号,返回最后生成的字符串 2.Array.reverse ...
- JavaScript数组方法详解
JavaScript数组方法详解 JavaScript中数组的方法种类众多,在ES3-ES7不同版本时期都有新方法:并且数组的方法还有原型方法和从object继承的方法,这里我们只介绍数组在每个版本中 ...
- JavaScript数组方法大集合
JavaScript数组方法集合 本文总结一下js数组处理用到的所有的方法.自己做个笔记. 数组方法 concat() 合并两个或多个数组 concat()能合并两个或者多个数组,不会更改当前数组,而 ...
随机推荐
- JAVA数据结构--快速排序
快排概念 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出.在平均状况下,排序个项目要(大O符号)次比较.在 ...
- 阿里云Centos下安装nginx之后外网无法访问
centos 7.4 nginx1-14.0编译安装 curl 127.0.0.1 可以请求到 index.html curl local 可以请求到 index.html http://ip/ 无法 ...
- 小众软件:windows 系统下 exe 文件打包软件
1. Enigma Virtual Box 单文件打包软件 官网:EnigmaProtection 2. 安装包打包软件 官网:Inno Setup 参考文献: [1] 单文件制作工具Enigma V ...
- UML图及Visio 2010使用总结
1. 关于UML9种图的详细介绍: 参考链接A:UML 九种图详解 参考链接B:UML的九种图+包图 2. 深入探究类图: 类图间的关系:泛化 .继承.实现.依赖.关联.聚合.组合: 参考链接A:ht ...
- linux vi文本编辑器三种模式切换及常用操作
初学者刚进入vi不要乱点键盘,vi的三种模式和各种命令很容易弄混@@ vi编辑器是Unix系统最初的编辑器.它使用控制台图形模式来模拟文本编辑窗口,允许查看文件中的行.在文件中移动.插入.编辑和替换文 ...
- oracle--dump块信息操作
01, 查看表 SQL> select * from tab where TNAME='T'; TNAME TABTYPE ----------------------------------- ...
- 【python】-matplotlib.pylab常规用法
目的: 了解matplotlib.pylab常规用法 示例 import matplotlib.pylab as pl x = range(10) y = [i * i for i in x] pl. ...
- 百度ECharts数据绑定诀窍
百度Echarts的功能还是蛮好用的.. 不能说多好但是也不次.. 下边就分享一些数据绑定经验..对在处理过程中的思路有一些帮助... 报表里用的最多的可以说是 饼状图和柱形图.. 饼状图里当然是包括 ...
- IDEA里运行代码时出现Error:scalac: error while loading JUnit4, Scala signature JUnit4 has wrong version expected: 5.0 found: 4.1 in JUnit4.class错误的解决办法(图文详解)
不多说,直接上干货! 问题详情 当出现这类错误时是由于版本不匹配造成的 Information:// : - Compilation completed with errors and warnin ...
- jQuery validate 设置失去焦点就校验和失去焦点就表单校验是否通过
js部分 html部分 自定义样式: /*自定义validate覆盖掉了 validate 里面默认的显示样式*/ label.error{ background:url(${pageContext. ...