1
- Array 对象
1
+ # Array 对象
2
2
3
3
## 构造函数
4
4
@@ -661,7 +661,7 @@ function isEven(x) { return x % 2 === 0 }
661
661
662
662
### reduce(),reduceRight()
663
663
664
- ` reduce ` 方法和` reduceRight ` 方法依次处理数组的每个成员,最终累计为一个值。它们的差别是,` reduce ` 是从左到右处理(从第一个成员到最后一个成员),` reduceRight ` 则是从右到左(从最后一个成员到第一个成员),其他完全一样。
664
+ ` reduce() ` 方法和` reduceRight() ` 方法依次处理数组的每个成员,最终累计为一个值。它们的差别是,` reduce() ` 是从左到右处理(从第一个成员到最后一个成员),` reduceRight() ` 则是从右到左(从最后一个成员到第一个成员),其他完全一样。
665
665
666
666
``` javascript
667
667
[1 , 2 , 3 , 4 , 5 ].reduce (function (a , b ) {
@@ -675,18 +675,33 @@ function isEven(x) { return x % 2 === 0 }
675
675
// 最后结果:15
676
676
```
677
677
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 次 。
679
679
680
- ` reduce ` 方法和` reduceRight ` 方法的第一个参数都是一个函数。该函数接受以下四个参数。
680
+ - 第一次执行:` a ` 是数组的第一个成员` 1 ` ,` b ` 是数组的第二个成员` 2 ` 。
681
+ - 第二次执行:` a ` 为上一轮的返回值` 3 ` ,` b ` 为第三个成员` 3 ` 。
682
+ - 第三次执行:` a ` 为上一轮的返回值` 6 ` ,` b ` 为第四个成员` 4 ` 。
683
+ - 第四次执行:` a ` 为上一轮返回值` 10 ` ,` b ` 为第五个成员` 5 ` 。至此所有成员遍历完成,整个方法的返回值就是最后一轮的返回值` 15 ` 。
681
684
682
- 1 . 累积变量,默认为数组的第一个成员
683
- 2 . 当前变量,默认为数组的第二个成员
684
- 3 . 当前位置(从0开始)
685
- 4 . 原数组
685
+ ` reduce() ` 方法和` reduceRight() ` 方法的第一个参数都是一个函数。该函数接受以下四个参数。
686
+
687
+ 1 . 累积变量。第一次执行时,默认为数组的第一个成员;以后每次执行时,都是上一轮的返回值。
688
+ 2 . 当前变量。第一次执行时,默认为数组的第二个成员;以后每次执行时,都是下一个成员。
689
+ 3 . 当前位置。一个整数,表示第二个参数(当前变量)的位置,默认为` 1 ` 。
690
+ 4 . 原数组。
686
691
687
692
这四个参数之中,只有前两个是必须的,后两个则是可选的。
688
693
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 ()` 方法的第二个参数。
690
705
691
706
` ` ` javascript
692
707
[1 , 2 , 3 , 4 , 5 ].reduce (function (a , b ) {
@@ -695,9 +710,9 @@ function isEven(x) { return x % 2 === 0 }
695
710
// 25
696
711
` ` `
697
712
698
- 上面代码指定参数` a ` 的初值为10,所以数组从10开始累加,最终结果为25。注意,这时` b ` 是从数组的第一个成员开始遍历。
713
+ 上面代码指定参数` a` 的初值为10,所以数组从10开始累加,最终结果为25。注意,这时` b` 是从数组的第一个成员开始遍历,参数函数会执行5次 。
699
714
700
- 上面的第二个参数相当于设定了默认值,处理空数组时尤其有用 。
715
+ 建议总是加上第二个参数,这样比较符合直觉,每个数组成员都会依次执行 ` reduce () ` 方法的参数函数。另外,第二个参数可以防止空数组报错 。
701
716
702
717
` ` ` javascript
703
718
function add (prev , cur ) {
@@ -710,9 +725,9 @@ function add(prev, cur) {
710
725
// 1
711
726
` ` `
712
727
713
- 上面代码中,由于空数组取不到初始值 ,` reduce ` 方法会报错。这时,加上第二个参数,就能保证总是会返回一个值。
728
+ 上面代码中,由于空数组取不到累积变量的初始值 ,` reduce () ` 方法会报错。这时,加上第二个参数,就能保证总是会返回一个值。
714
729
715
- 下面是一个` reduceRight ` 方法的例子。
730
+ 下面是一个` reduceRight () ` 方法的例子。
716
731
717
732
` ` ` javascript
718
733
function subtract (prev , cur ) {
@@ -723,9 +738,9 @@ function subtract(prev, cur) {
723
738
[3 , 2 , 1 ].reduceRight (subtract) // -4
724
739
` ` `
725
740
726
- 上面代码中,` reduce ` 方法相当于` 3 ` 减去` 2 ` 再减去` 1 ` ,` reduceRight ` 方法相当于` 1 ` 减去` 2 ` 再减去` 3 ` 。
741
+ 上面代码中,` reduce () ` 方法相当于` 3 ` 减去` 2 ` 再减去` 1 ` ,` reduceRight` 方法相当于` 1 ` 减去` 2 ` 再减去` 3 ` 。
727
742
728
- 由于这两个方法会遍历数组,所以实际上还可以用来做一些遍历相关的操作 。比如,找出字符长度最长的数组成员。
743
+ 由于这两个方法会遍历数组,所以实际上可以用来做一些遍历相关的操作 。比如,找出字符长度最长的数组成员。
729
744
730
745
` ` ` javascript
731
746
function findLongest (entries ) {
@@ -737,7 +752,7 @@ function findLongest(entries) {
737
752
findLongest ([' aaa' , ' bb' , ' c' ]) // "aaa"
738
753
` ` `
739
754
740
- 上面代码中,` reduce ` 的参数函数会将字符长度较长的那个数组成员,作为累积值。这导致遍历所有成员之后,累积值就是字符长度最长的那个成员。
755
+ 上面代码中,` reduce () ` 的参数函数会将字符长度较长的那个数组成员,作为累积值。这导致遍历所有成员之后,累积值就是字符长度最长的那个成员。
741
756
742
757
### indexOf(),lastIndexOf()
743
758
0 commit comments