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()能合并两个或者多个数组,不会更改当前数组,而 ...
随机推荐
- springBoot 实现中文国际化
一:实现效果如下: 二 SpringBoot 国际化配置 1.创建国际化配置文件(3个): messages.properties messages.user.name=用户名 messages.us ...
- jvm内存分部
首先我们必须要知道的是 Java 是跨平台的.java常用的名词有jdk,jre,jvm jdk包括后两者,是开发者工具集, jre表示java运行环境, jvm是java虚拟机,是java夸平台的保 ...
- EPC sequence
nps-epc-term-2.7.0 eNodeB: /root/b2b/eutran/01/bin ./clean_log.sh ./set_ip.sh [root@CEN6- bin]# ./cl ...
- jumserver 官方文档和
一步一步安装(CentOS) 本文档旨在帮助用户了解各组件之间的关系, 生产环境部署建议参考 进阶安装文档 安装过程中遇到问题可参考 安装过程中常见的问题 测试推荐环境 CPU: 64位双核处理器 ...
- Java中的AES加解密工具类:AESUtils
本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt; import com.mirana.frame.constants.SysConsta ...
- c# 闲谈异常处理
今天在阅读 .net 源码时发现微软对所有使用枚举类型的地方对枚举值进行了检测,在检测不通过时抛出了异常. , )) { throw new InvalidEnumArgumentException( ...
- linux curl post/put请求
案列: -X: 请求方式 --header: 请求header -d: 请求的数据 最后跟上请求的地址 curl -X PUT --header 'Content-Type: application/ ...
- 初学SSM遇到的BUG
一.SpringMVC部分 1.参数绑定 1.1简单类型绑定 参数类型推荐使用包装数据类型,因为基础数据类型不可以为null 整形:Integer.int 字符串:String 单精度:Float.f ...
- 安卓与windows
windows phone 还是PC啊?windows PC的话,应该就是你现在用的电脑系统吧,PC系统和安卓是不一样的,安卓是移动设备系统,基于的构架也不同,意思就是电脑上装不上安卓,移动设备也装不 ...
- 2019.04.17 读书笔记 checked与unchecked
在普通的编程中,我们是很容易去分析数据的大小,然后给出合理的类型,但是在很多数据库的累计中,缺存在很多隐患,特别是研发时,数据量小,求和也不会溢出,当程序运行几年后,再来一次大求和,隐形的BUG就出来 ...