1- Array 对象
1+ # Array 对象
22
33## 构造函数
44
@@ -661,7 +661,7 @@ function isEven(x) { return x % 2 === 0 }
661661
662662### reduce(),reduceRight()
663663
664- ` reduce ` 方法和` reduceRight ` 方法依次处理数组的每个成员,最终累计为一个值。它们的差别是,` reduce ` 是从左到右处理(从第一个成员到最后一个成员),` reduceRight ` 则是从右到左(从最后一个成员到第一个成员),其他完全一样。
664+ ` reduce() ` 方法和` reduceRight() ` 方法依次处理数组的每个成员,最终累计为一个值。它们的差别是,` reduce() ` 是从左到右处理(从第一个成员到最后一个成员),` reduceRight() ` 则是从右到左(从最后一个成员到第一个成员),其他完全一样。
665665
666666``` javascript
667667[1 , 2 , 3 , 4 , 5 ].reduce (function (a , b ) {
@@ -675,18 +675,33 @@ function isEven(x) { return x % 2 === 0 }
675675// 最后结果:15
676676```
677677
678- 上面代码中,` reduce ` 方法求出数组所有成员的和。第一次执行, ` a ` 是数组的第一个成员 ` 1 ` , ` b ` 是数组的第二个成员 ` 2 ` 。第二次执行, ` a ` 为上一轮的返回值 ` 3 ` , ` b ` 为第三个成员 ` 3 ` 。第三次执行, ` a ` 为上一轮的返回值 ` 6 ` , ` b ` 为第四个成员 ` 4 ` 。第四次执行, ` a ` 为上一轮返回值 ` 10 ` , ` b ` 为第五个成员 ` 5 ` 。至此所有成员遍历完成,整个方法的返回值就是最后一轮的返回值 ` 15 ` 。
678+ 上面代码中,` reduce() ` 方法用来求出数组所有成员的和。 ` reduce() ` 的参数是一个函数,数组每个成员都会依次执行这个函数。如果数组有 n 个成员,这个参数函数就会执行 n - 1 次 。
679679
680- ` reduce ` 方法和` reduceRight ` 方法的第一个参数都是一个函数。该函数接受以下四个参数。
680+ - 第一次执行:` a ` 是数组的第一个成员` 1 ` ,` b ` 是数组的第二个成员` 2 ` 。
681+ - 第二次执行:` a ` 为上一轮的返回值` 3 ` ,` b ` 为第三个成员` 3 ` 。
682+ - 第三次执行:` a ` 为上一轮的返回值` 6 ` ,` b ` 为第四个成员` 4 ` 。
683+ - 第四次执行:` a ` 为上一轮返回值` 10 ` ,` b ` 为第五个成员` 5 ` 。至此所有成员遍历完成,整个方法的返回值就是最后一轮的返回值` 15 ` 。
681684
682- 1 . 累积变量,默认为数组的第一个成员
683- 2 . 当前变量,默认为数组的第二个成员
684- 3 . 当前位置(从0开始)
685- 4 . 原数组
685+ ` reduce() ` 方法和` reduceRight() ` 方法的第一个参数都是一个函数。该函数接受以下四个参数。
686+ 687+ 1 . 累积变量。第一次执行时,默认为数组的第一个成员;以后每次执行时,都是上一轮的返回值。
688+ 2 . 当前变量。第一次执行时,默认为数组的第二个成员;以后每次执行时,都是下一个成员。
689+ 3 . 当前位置。一个整数,表示第二个参数(当前变量)的位置,默认为` 1 ` 。
690+ 4 . 原数组。
686691
687692这四个参数之中,只有前两个是必须的,后两个则是可选的。
688693
689- 如果要对累积变量指定初值,可以把它放在` reduce ` 方法和` reduceRight ` 方法的第二个参数。
694+ ``` javascript
695+ [1 , 2 , 3 , 4 , 5 ].reduce (function (
696+ a , // 累积变量,必须
697+ b , // 当前变量,必须
698+ i , // 当前位置,可选
699+ arr // 原数组,可选
700+ ) {
701+ // ... ...
702+ ` ` `
703+
704+ 如果要对累积变量指定初值,可以把它放在` reduce ()` 方法和` reduceRight ()` 方法的第二个参数。
690705
691706` ` ` javascript
692707[1 , 2 , 3 , 4 , 5 ].reduce (function (a , b ) {
@@ -695,9 +710,9 @@ function isEven(x) { return x % 2 === 0 }
695710// 25
696711` ` `
697712
698- 上面代码指定参数` a ` 的初值为10,所以数组从10开始累加,最终结果为25。注意,这时` b ` 是从数组的第一个成员开始遍历。
713+ 上面代码指定参数` a` 的初值为10,所以数组从10开始累加,最终结果为25。注意,这时` b` 是从数组的第一个成员开始遍历,参数函数会执行5次 。
699714
700- 上面的第二个参数相当于设定了默认值,处理空数组时尤其有用 。
715+ 建议总是加上第二个参数,这样比较符合直觉,每个数组成员都会依次执行 ` reduce () ` 方法的参数函数。另外,第二个参数可以防止空数组报错 。
701716
702717` ` ` javascript
703718function add (prev , cur ) {
@@ -710,9 +725,9 @@ function add(prev, cur) {
710725// 1
711726` ` `
712727
713- 上面代码中,由于空数组取不到初始值 ,` reduce ` 方法会报错。这时,加上第二个参数,就能保证总是会返回一个值。
728+ 上面代码中,由于空数组取不到累积变量的初始值 ,` reduce () ` 方法会报错。这时,加上第二个参数,就能保证总是会返回一个值。
714729
715- 下面是一个` reduceRight ` 方法的例子。
730+ 下面是一个` reduceRight () ` 方法的例子。
716731
717732` ` ` javascript
718733function subtract (prev , cur ) {
@@ -723,9 +738,9 @@ function subtract(prev, cur) {
723738[3 , 2 , 1 ].reduceRight (subtract) // -4
724739` ` `
725740
726- 上面代码中,` reduce ` 方法相当于` 3 ` 减去` 2 ` 再减去` 1 ` ,` reduceRight ` 方法相当于` 1 ` 减去` 2 ` 再减去` 3 ` 。
741+ 上面代码中,` reduce () ` 方法相当于` 3 ` 减去` 2 ` 再减去` 1 ` ,` reduceRight` 方法相当于` 1 ` 减去` 2 ` 再减去` 3 ` 。
727742
728- 由于这两个方法会遍历数组,所以实际上还可以用来做一些遍历相关的操作 。比如,找出字符长度最长的数组成员。
743+ 由于这两个方法会遍历数组,所以实际上可以用来做一些遍历相关的操作 。比如,找出字符长度最长的数组成员。
729744
730745` ` ` javascript
731746function findLongest (entries ) {
@@ -737,7 +752,7 @@ function findLongest(entries) {
737752findLongest ([' aaa' , ' bb' , ' c' ]) // "aaa"
738753` ` `
739754
740- 上面代码中,` reduce ` 的参数函数会将字符长度较长的那个数组成员,作为累积值。这导致遍历所有成员之后,累积值就是字符长度最长的那个成员。
755+ 上面代码中,` reduce () ` 的参数函数会将字符长度较长的那个数组成员,作为累积值。这导致遍历所有成员之后,累积值就是字符长度最长的那个成员。
741756
742757### indexOf(),lastIndexOf()
743758
0 commit comments