可以理解为数组的归并方法,这个方法和迭代方法(map,forEach,filter...)一样,都会对数组进行遍历,reduce与他们不同的是函数的第一个参数得到的是迭代计算后的效果.

语法:

接收两个参数:

一.要执行的函数,要执行的函数中也可传入参数,分别为:

1.prev:上次调用函数的返回值

2.cur:当前元素

3.index:当前元素索引

4.arr:被遍历的数组

二.函数迭代的初始值

我们分情况来介绍:

a.没有设置函数的初始迭代值

 

我们来分析一下,在此reduce的作用就是对这个数组进行求和,迭代了3次,函数迭代的初始值是0, 

也就是函数的第一项,也可称为默认值,prev的值是每次计算后的值.

具体分析:1.第一次函数迭代初始值是0,当前值是1,索引是1,所以打印出0 1 1

2.第二次函数迭代初始值为1(第一次函数迭代的值+第一次的当前值,0+1=1),当前值是2,当前索引是2,所以打印出1 2 2 

3.第三次函数迭代值是3(第二次函数迭代值1+第二次的当前值2=3),当前值是3,索引是3,所以打印出3 3 3

小伙伴们应该懂了吧,毕竟俊熙分析的这么细致!!

b.有设置函数的初始迭代值

我们再来看设置了函数迭代值的情况

 

分析过程:

1.这次设置了函数迭代值5,所以初始值为5,当前值为1,索引是0

2.第二次的函数迭代值是6(第一次的函数迭代初始值5+第一次的当前值1=6),当前值为2,索引为1

3.第三次的函数迭代值是8(第二次的函数迭代值6+第二次的当前值2=8),当前值是3,索引是2

4.第四次的函数迭代值是11(第三次的函数迭代值8+第三次的当前值3=11),当前值是4,索引是3

基础语法各位小伙伴应该理解了吧!!

不要走开,这才是开胃菜,下面我们来学习一些初级应用.高级应用 

一.初级应用:

 

二.高级应用 

1.计算数组中每个元素出现的次数

 

我们一起来分析一下执行过程:

1.可以看出这次设置了函数迭代值,但是是一个空对象{},所以cur也就是当前值就是name,也就是第一次打印出的结果.

2. 继续分析,又因为现在pre中有name属性,所以就把name对应的属性值设置为1,再加上当前值是age,也就是第二次打印结果.

3.第三次:因为name对应的属性值是age,age也是1,当前值是'long'.

4.第四次:name对应的属性值是'long','long'也是1,当前值是'short'.

5.第五次:name对应的属性值是'short',当前值为'long'.

6.第六次:name对应的属性值是'long',第五次已经出现'long',所以'long'会被记录2次,当前值'name'.(*)

7.第七次:name对应的属性值是'name',由于第六次'name'已经作为当前值出现,他又被记录一次,此时记录为2次,继续,当前值还是'name'

8.第八次:name对应的属性值是'name',分析得出此时'name'已经第三次出现,所以记录为3,此时当前值已经没有数据了,所以此时是汇总阶段,在第六次那我标记了一个*号,记录'long'出现了两次,其余的'age'和'short'没有重复出现.

总结:{name: 3, age: 1, long: 2, short: 1}是最终结果

被绕晕了吗,小伙伴们,我已经分析的很详细了.

2.对对象的属性求和

3.去除数组中重复的元素

 

主要是借助迭代功能实现数组的扩展,判断当前元素是否已经添加到数组中,如果不存在就从尾部添加,在此不一一分析了,具体原理和上边的分析每个元素出现次数大同小异,这里的函数迭代值给的是一个数组,所以第一次的当前值是'1',以此类推.

不足之处,请各位小伙伴多多见谅! 

 

 

 

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信