ES5新增数组方法
ES5新增数组方法学习笔记。
Foreach
接收一个函数作为参数,对数组进行循环遍历,而并不改变数组。
语法
|
|
参数
forEach方法会对数组的有效值的每一项执行callback函数,已经删除或者未初始化的项会被跳过。而callback函数会被传入三个参数:
- 数组当前项值
- 当前项的索引
- 数组对象本身
|
|
区别就在于forEach回调返回了三个参数,如图
![[forEach] [forEach]](/2017/05/06/new-array-func-es5/forEach.png)
而array.forEach(callback[, thisArg])方法中thisArg参数是可选的,如果指定则在执行回调时用作this的值,否则默认传入undefine。
兼容polyfill
作为ES5新增方法,难免有些浏览器不支持,所以当我们使用时需要添加一段代码来帮助它兼容旧环境(polyfill),代码来自MDN。
注意
forEach无法在所有有效元素传递给回调函数之前终止(而for循环有break方法),如需提前终止,需要把forEach置于try语句块中,并抛出异常。
Map
用法同forEach基本相同,区别在于map方法返回一个新数组
语法
|
|
参数
略.
实例
略.
兼容polyfill
区别于forEach():
Every
every()接收一个返回值布尔类型的函数。
语法
|
|
参数
every方法为数组的每一项执行callback函数,不会改变原数组。如果所有项callback函数返回为true,则方法返回true,如果遇到一个返回值为false,则直接终止并返回false。
同样,callback方法只对那些有效值的项进行操作。
callback被调用传入三个函数:
- 元素值
- 元素索引
- 数组对象本身
实例
检测是否为奇数
兼容polyfill
|
|
Some
用法同every()基本相同,区别在于只要有一项callback函数返回值为true则方法返回true,否则为false。
语法
|
|
参数
略.
实例
略.
兼容polyfill
略.区别只在于return值取反
reduce
接受一个回调函数作为累加器,数组中每个值开始缩减,最终为一个值,是ES5中新增的一个数组逐项处理方法。
reduce直译是缩减减少,函数定义以及实现个人感觉更像是递归。
语法
|
|
参数
reduce方法接收一个函数类型的回调函数和一个可选初始值参数
- callback 数组每一项的回调函数,接受4个参数
- accumulator 上一次调用的返回值或者初始值
- currentValue 正在处理的数组元素
- currentindex 正在处理的数组元素索引
- array 数组元素本身
- initialValue 可选初始值参数,第一次调用传给accumulator
回调函数第一次执行时,有两种情况,如果initialValue指定,则accumulator取值为initialValue,currentValue取值数组第一项,如果没有指定initialValue,
accumulator取值数组第一项,而currentValue取值数组第二项。
如果数组为空且没有提供initialValue,会抛出TypeError错误,如果仅有一个元素且没提供initialValue或者提供了initialValue数组为空,则直接返回,不会调用callback。
实例
数组求和,数组扁平化,计算数组中值出现次数
兼容polyfill
一如既往地代码来自MDN
Filter
同every()方法类似,回调函数参数相同,返回值为回调参数结果为true的所有项集合的数组。
语法
|
|
参数
filter为数组中每一个有效值项调用callback函数,返回一个新数组,数组内容是callback返回值为true的元素的集合。
实例
筛选奇数
兼容polyfill
|
|