00:00
Hello,大家好,那这个小节我们来实现一下reduce函数啊,这个函数效果与数组当中的reduce方法呢,效果是一模一样子的。啊,它是这个数组里边每个元素啊。进行回调执行,并且把上一次回调函数的执行结果啊。然后呢,作为下一个参数继续去执行。然后呢,返回最终的结果。光这样说的话,大家对这个函数认识呢,并不是很清楚啊,所以这里我们先使用数组原生,数组原型上面那个reduce方法来做个演示。比如说呢,我们现现在想求一下。数组啊。这个AR元素的一个和啊,我们可以怎么做呢?我们可以这样来做。A reduce。我们往里边传递一个回调。这个回调呢,它里边就有两个参数,第一个参数是上一次运行的结果啊。
01:01
大家同学可能会想说,没有上一次怎么办呢?没有上一次的话,它有一个初始值,后边可以传一个初始值。啊,然后当前这块咱们写一个result。然后呢,第二个参数是当前那个结果,我们写一个value。啊,然后这里边我们return一下result,然后再加上一个value就可以了。呃,当然这块呢,有点歧义,我们可以把它换一换,换成一个res变量啊,一起来看结果。打印一下。然后打开浏览器。啊,刷新瞅一眼大家可以看到啊,这是15没有问题。它是怎么一个运算方式呢?啊,其实是这样子的,第一次执行的时候呢。啊,他把最开始这个。初始值放到第一个参数这一块。然后呢,取出数组当中的第一个元素。把它呢,放到这个位置。大家可以看一下啊,那么这样它们两个相加的结果是几啊,结果是一。
02:01
啊,这是第一次回调执行的结果,是个一。那么一完了之后呢,接下来开始执行第二次回调。他把一呢再传过来。作为就是这是上一次那个运行结果。然后呢,再从数组里边取出第二个元素拿过来。进行累加,然后一加二等于三好,这第二次运行完之后,结果呢,就成了三了。三完了之后呢,等下一次再执行的时候呢,Res结果就已经变成上一次结果了,是三。而Y6这块就是下一次的这个结果,第三次循环这个值三拿过来。啊,然后它们相加,结果呢是六啊,下一次四翻过来加四再加,然后反问结果是十,然后再加55。它是这样一种运算方式。好了,这当前咱们先对reduce的它的一个效果做了一个演示,然后接下来的话,咱们来封装一下reduce这个函数。最终呢,它的使用方式是这样子的。
03:01
括弧。啊,第一个参数是数组。第二个参数呢,是那个回调。Res value。第三个参数呢,是那个初始值。好,然后在这呢,我们用一个变量做一下接收。在这呢,Return一下res,加上一个value搞定。好了,那么到这儿的话。这是最终的形式。就已经写完了。接下来我们去对这个函数做实现。写注释。DOS函数的一个调用。首先第一步呢,咱们先把结构先搭一下啊,Function reduce。第一个参数呢,是数组AR。第二个呢是回调call back,第三个呢是初始化那个值int value。好了,然后在这的话,咱们得有一个结果啊,所以说我先声明一个变量。啊,Let result等于。
04:02
这个等于谁呢?我们可以先让它等于初始化那个结果。Init value。那么然后呢,接下来我们就可以呢,去执行这个回调了。但是直接回调。你不能执行一次啊,要对这个数字啊做一下便利,然后对里边每个元素都要去执行回调。所以说咱们要对数组做一个便利,Let I等于个零。I呢小于a.Les I加加。在里边在这个位置呢,直行回调。啊,回调怎么执行呢,Call back。那么call back在这个位置。我们应该传的是上一次运行的那个结果啊,咱们上一次运行其实就是这个第一次init value啊,我们把result它放进来。好放进来之后呢,第二个参数是谁呢?第二个参数是当前正在便利的那个元素。
05:01
当前正在变的元素是arr下标I。好,它会有一个返回结果。这个返回结果呢,早点接受。啊,如果不接收啊,下边下一次循环咱没法去用,那么用谁来接收呢?这是个问题。在生命的变量去接收。比方说我们像这样子,Let are接收,这样行不行呢?这样子是不行的。因为什么呢?因为下一次我还要把R。放到calls里边呢。所以说这块用R不行,咱用谁呢?咱可以这样子用result。啊用results,那这样一来的话呢,你把上比方说第一次循环啊,第一次循环你把结果拿过来放到result里边,下一次循环的时候,我再把result放进去,作为第一个参数去执行。得到第二个结果。第二个结果呢,在作为第三个的。这个第一个参数。第三次循环的一个参数,然后去执行啊,到第三个结果,以此类推到最后。
06:01
好,这样的话呢,等到最后我们就得到结果了。然后返回最终的结果。完成。Return一下results。好了,我们来看看效果怎么样啊,切过来右键刷新。啊,没有问题,当然我们可以变换一下,比如说这个值呢,不是一了啊,不是零了,咱们是十。切过来刷新一面,你看结果就是25。没有问题。好了,那么reduce函数封装我们就先到这儿啊,把这个呢再加一下,这是一个数组A。啊,这块是一个函数。啊,这个呢,是那个初始值,任何类型都可以。
我来说两句