Skip to content

Commit e90b8a1

Browse files
committed
docs(stdlib/array): fixed wangdoc#228 reduce()
1 parent bae4e98 commit e90b8a1

File tree

3 files changed

+44
-95
lines changed

3 files changed

+44
-95
lines changed

docs/stdlib/array.md

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
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
703718
function 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
718733
function 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
731746
function findLongest(entries) {
@@ -737,7 +752,7 @@ function findLongest(entries) {
737752
findLongest(['aaa', 'bb', 'c']) // "aaa"
738753
```
739754
740-
上面代码中,`reduce`的参数函数会将字符长度较长的那个数组成员,作为累积值。这导致遍历所有成员之后,累积值就是字符长度最长的那个成员。
755+
上面代码中,`reduce()`的参数函数会将字符长度较长的那个数组成员,作为累积值。这导致遍历所有成员之后,累积值就是字符长度最长的那个成员。
741756
742757
### indexOf(),lastIndexOf()
743758

package-lock.json

Lines changed: 12 additions & 78 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
},
3636
"homepage": "https://github.com/wangdoc/javascript-tutorial",
3737
"dependencies": {
38-
"gh-pages": "^3.2.0",
38+
"gh-pages": "^3.2.3",
3939
"husky": "^4.3.8",
4040
"loppo": "^0.6.23",
4141
"loppo-theme-wangdoc": "^0.5.2"

0 commit comments

Comments
 (0)