Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e90b8a1

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

3 files changed

Lines changed: 44 additions & 95 deletions

File tree

‎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)

AltStyle によって変換されたページ (->オリジナル) /