00:01
好,我们继续来开发啊。那么呃,我们现在呢,要做的是什么呢?实际上就是要将零散的tokens呀嵌套起来。啊,那现在大家可以看见,就是我们刚刚生成的这些tokens呢,它非常的零散。啊,非常的零散,那非常零散的意思就指的是什么呢?就是你这个井号students啊,井号students。到这个结束students对吧,哎,咱们拿这个直线好好画啊,这个到这个啊,拿这个矩形画吧。好,那他们之间呢,明显是一家子。对吧,他们之间明显是一家子,所以说我们现在就需要给他干嘛呀,对,给他们把里头的东西啊,当做它的一个子项。啊,当做它的一个下标为三的啊,不二的012嘛,在这儿多一个子项啊,等于说里头东西要放在它这里头,变成它的tons。
01:00
对对吧,哎,那同样道理,你这个井号item加hobbies。啊,然后你这里有个斜线item叫hobbies,那实际上呢,他们是不是也应该当做是这个就是这里边的东西啊,这里边的东西不是他们是这里面三行啊123对吧,这三行啊,是不是都要作为它的token的子项。啊,来去存在啊。看见了吗?是这样子的。所以这个时候呢,他就给你提供了一个算法啊,不是说他给你提供了一个算法,就是呃,我们自己。诶,就是计算机行业有一个著名的算法,就是让你实现这样的,因为我我先做一下铺垫啊,就先做一下铺垫,你这个算法难在哪里。就是你不知道你现在嵌套到第几层了。因为你student这一层,它里头可能还会产生新的一层。对吧,然后它呢,还会产生。这一层。这没问题吧,对吧,就是说他要结束掉这一层,再回到上一层,遇见一个斜线就回到上一层。
02:06
那其实如果说编程能力强的同学啊,编程能力强的同学一听见邵老师说啊,什么进入新的一层,回到上一层,一听见老师说这样的话,其实脑子中马上就能想到一个数据结构,这个数据结构的名字呢,就叫做站。啊,这个数据结构的名字就叫做站。所以很多同学呢,可能都是啊,只听说过数据结构这个词啊,只真的咱们咱们不夸张的说啊,很多同学是只听说过数据结构这个词啊,只听说过数据结构这个词。对吧,但是呢,实际上自己呢,是没有用过。那这里为什么要用战,咱们首先先去讲讲战是什么东西啊,这块PPT老师是带着你们把这个PPT给它展示出来,因为非常关键啊,战是什么栈的话呢,实际上就是一种堆叠结构。
03:01
啊,咱们生活中的很多都是队列结构,比如说羽毛球桶。哎,那这个它只有一头开。啊,羽毛球大家可以知道它不是放在一个桶中吗?那这个时候呢,它是只有一头开一头出。就是它在同一个啊开口。哎,然后进出。那这个时候呢,我们就先进去,哎一层。哎,进去一层。然后呢,再进去一层,那这一层势必怎么着,对,就要压在之前那层上去。然后再进一层,肯定还是在它上边。那精彩的来了。就是当你出战的时候。对吧,那是不是就是他还是最后进的,他要先出啊。对吧,最后进去他要先出,这是倒数第二进的,他要倒数第二出,最先进的他要最后出。所以说它叫做什么呢?它叫做first in last out啊,它是一个fellow啊,取这个自首啊,I。
04:06
可以管它叫做fellow型的结构。啊,就是你最先进去的啊,它反而是最后出。最先进去的反而是最后出。是这样子的。所以这个意思是什么呢?这个意思其实就就是往很简单的说,就是我们遇见一个井号,那这个时候我们就进站啊,进站也叫做压战。啊,就是什么意思呢?就是我们遇见井号就进站。那就进站。好,然后我们遇见斜线呢,就出战。那同学们可能还是有点懵,说这是到底什么意思呀?其实很简单,就是我遇见井号了,这不students嘛,那我就压榨啊,那这个层呢,其实就是关于students的。那你直到你遇见斜杠线之前,现在所有的你懂吗?就现在所有的这里面的子元素是不是都是它的一个子数组啊。
05:05
对吧?哎,然后又遇见how item.hobbies那是不是又压在又压一层,那这块是item点什么呀,Hobbies。懂不懂啊,当然了。哎,好比。对吧,Item加hobbies。这样两个B啊。当然这块这个啊,没有更多的层啊,但是老师就是一个意思啊,给你在这儿再画一层吧,咱们这个意思就是一个意思。哎,告诉你他这个大概的一个压榨的一个思路是什么啊,一层一层的。啊,那所以说这块用个占的结构,我们要给它堆起来,咱们再来看一下咱们目标,目标就是咱们刚才画的图,哎,把这里边的东西呢,能够折到四六顿词中,把这三个东西呢,能够折到item的hobbies中,啊,其实不难,就是。这些算法你只要有目标有思路啊,你只要有目标有思路,那么这个时候实际上呢,你就会知道,哎,这个时候实际上你就会知道它是。
06:04
它是怎么样的,是这样子的啊,它是啊什么样子的这样的一个啊,什么样子的这样的一个情况,对吧?好,那咱们现在呢,就可以去写啊,咱们刚才你看这个函数最后返回的是不是一个tokens呀。对吧,哎,那这个tokens呢,并没有被所谓的整合起来。啊,所以并没有被就是所谓的呃折叠起来,所以这个时候我们就去新建一个文件叫n token啊N它在这里是个动词,表示折叠。哎,As default,一个函数叫做n tokens。啊,Nice tokens,它表示折叠这个token,啊,折叠这个token。是这样子的,折叠陶肯。好吧,那他呢,就要收集一个零散的tokens这样的一个数组。啊,然后呢,这个函数的目功能是什么呀,这个函数的功能啊,函数的功能是折叠,哎,Tokens啊将井号和斜线之间的tokens呢,能够啊就是整合起来。
07:13
哎,作为它的啊,下标为三的。下标为三的这样的一个项。啊,这样子的。那这个函数肯定要被引爆啊,那就被这个啊,咱们刚才这个pass他to Co cos引爆就行啊,因为你总不容让主函数去引爆,因为它等于说本质上返回一个完整的tokens啊。所以说他就可以去拉兄弟。啊拉这个兄弟,然后我们把这个nice tokens我们给他弄出来。好,然后在这里是不是要返回的时候就需要给他你看。给它嵌上是吧。对吧,哎,就等于说返回返回折叠的啊折叠的。哎,折叠收集的,哎这个token,所以这样,那这里又安迪发了,为啥。
08:05
对,你这个函数没有返回值啊,啊,但是如果说返回tons,那这个时候这个函数是不是什么都没有做。对吧,哎,这个时候什么什么都都没有做,这样子的啊。好,那接下来的话,咱们就需要写算法了啊,能把它们折叠起来,其实这个算法的话呢,就是你思路要清楚就不难。啊,那首先咱们先去啊,准备一个结果数组,哎,就是这个结果呢,咱们就管它叫nasty tokens啊。好,那他最后要返回这个结果,数组现在肯定就返回一个空嘛,对吧。啊,然后接下来要干嘛呢?你你琢磨琢磨,咱们接下来要干嘛,接下来的话肯定是要对这个,呃,咱们原来的这个tokens啊,我再把这个token输出一下,肯定要对这个原来的tokens进行一次遍历一次就够。对吧,那便利的时候干什么,我们先不说啊,我们先去把它写出来,把这个便利你看小于咱们tons的Les,然后爱加加,然后这个时候我们要去干什么。
09:07
我们要去干什么对吧,就是我们现在这个时候肯定是要去判断它这个开头的这个第零项对吧?哎啊,这我们把这个token存上啊,就管它叫tokens的第I项,这叫token了。啊,这么便利的每一项,那我这个时候肯定需要去Switch一下,Switch是什么意思,判断呀,判断这个token的第零项到底是什么,那如果是井号。啊,如果是井号,那怎么样。To。那如果是井号那怎么样,然后如果不是井号。对吧,如果是这个斜线,那怎么样。啊,然后如果是text就是它的啊,或者说没有就是default default不是没有这个符号吗。啊,那应该怎么样。就这种架势,你就应该给他啊,给他弄弄出来,那这个时候的话就就考验你的算法功底了啊,考验你的算法功底了,那就遇见井号了,我们这个时候肯定要入战,就是什么叫入战,入战的意思就指的是我们现在要让他就是。
10:12
就就因为因为我要让让咱们的这个程序啊,知道当前正在处理谁。对吧,当前正在处理谁。啊,当前正在处理谁,看见没有,当前正在处理谁,当前正在处理谁。就是我students没处完,那他一直就要在站底,虽然hobbies压进来了,但是呢,Students一直静静的待在站底,直到让他谈战,所以这个时候我们就需要有一个站的一个结构啊,站的一个结构,那么站顶,站顶就是靠近端口的。啊,就是新进入的,最新进入的,哎,占顶的这样的一个一一个,呃,一个数组啊,就是占结构里头存放小数组对吧,存放小token啊。小tons,那么占顶的这个tons数组。
11:01
哎,是当前操作的这个啊,Tokens小数组嘛,对吧,所以这个时候要有一个占结构,那这个占结构我们就管它叫sections吧。啊,叫sections。所以他这个时候什么意思呢?很简单,就是你遇见遇见井号了,我们就要压战,压战就是入战啊这个单词,这个词大家一定要记住,压战实际上就是入战。我们就要让tokens,我们就需要让他啊push一下啊,这不让sections push一下,Push什么push这个token,把这个token当前便利的进来。那遇见他的时候干嘛谈战?看见没有就谈战就行。啊,入战团战。啊,就就行。对吧,那所以说现在什么意思呢?咱们就可以log,哎,你就说你就你就你就你就去写,比如说就就写啊叫token,这token的第一项吧,因为ton第一项是他的名字嘛,对吧,然后加上一个入战啦。
12:02
哎,入战了是吧。好,然后泡泡泡泡的话,它是不是会返回一个刚刚出来的东西。啊,返回一个刚刚出来的东西,那咱们现在就可以,呃,返回他叫出站了,你看那咱们现在一刷新,你看他是不是就说students入战了,Hobby入战了,Hobby出战了,Students出战了,他是不是就这个过程。对吧,就是student入战了,然后hobbies入战了,到这个杠是不是hobbies就出战了,然后students是不是就出战了。是不是就是这样子的。所以是这样子,入战了,入战了,出战了,出战了啊,他是这样子的。发现了吗?所以所以它这个地方的话,就真的是非常非常的,怎么说呀,就非常非常的呃清晰,但是呢,咱们说句实在话啊,同学们可能对这种数据结构不是特别的啊了解啊,原因很简单,因为咱们大家在平时写view啊,或者的这些业务型的这些呃项目的时候啊,遇见的这种算法,尤其是咱们的数据结构啊,是比较呃单薄的啊,可能就用过普通的数组什么的,对吧?啊这种站思维是很少的。
13:12
那这个时候我们接下来看它不是有入站,它是出站啊,那这个时候我们。啊就OK了,对吧,没什么毛病吧,啊这个这个就他说出站出站其实出了一个section就出了,出了一个区域,这个section咱们就管它叫做站里放的那个小区域小型数组啊,咱们给它存成叫section这个名字没有S。好,那这个时候的话,我们看压战的时候要做什么。咱们大家想想压战的时候做什么,对压战的时候,这个时候我们是不是就需要用一个临时变量,把它就是都收集起来。没问题吧,所以就是哎,遇见它的时候,我们这个时候就需要用一个临时变量把它都收集起来。啊,这个应该能能能能能能想到啊,对吧,这个应该能想到啊。
14:00
但是呢,你想不到的是什么,就是你现在呢,你你可能你你会这么设置啊,就是说啊创建一个什么意思呢?就是咱们现在有压战入战了,遇见他,那这个时候这个ton就会入战。能理解吧,那接下来所有项是不是都应该成为它的下标为二的这项的元素?这个没问题吧,对吧,都应该能成为他的下标为二的这项元素,所以说什么意思呢,就相当于现在就要给它加入到。就给它创建一个下标为二的项。看到没有?对吧,我就需要给这个token当前你便利,这token下边为二这项,我要创建出一个数组。啊,给这个掏开。这个token下标为二的D啊,下标为二的下去加,呃,创建一个数组啊以收集。你收集他们的一个子元素吗?好,那这个时候是不是今后遇见的所有元素都要往这个占底去收集啊。
15:05
能明白吗?那这个时候这个占底是什么?占底是不是就是sex中的,呃,最后一项那三,因为站口是它push,就是你你这个站是push进来的,所以说它的队尾是站口。啊,所以第零项是不是永远是它的占比。对吧,然后N减一这项是它。这能理解吧,哎,永远是这个当前你这个三中的那个Les减一那一项,但是你这个Les减一这项呢,它不存在。就这三当中你没有,就是大家能理解吗?就是你当前这个站当中没有最后这一项,那这个时候呢。呃,你可能就会觉得编程有点乱。那么。这种情况的话呢,那就需要你小脑瓜子咱们动一动啊,什么意思呢?其实这个时候它有一层判断,就是说如果这个站里有东西。大家明白吗?那现在是不是就要往这个占,呃占底,占底就是说什么叫占顶啊站,因为咱们的现在这个站是从后边入啊push吗。
16:10
对吧,所以站口在对尾啊,就要给对尾这项加。这个大家应该能明白,这个肯定没问题对吧,所以这个就很简单啊,就是因为你这个default这块,那所以说这块就可以判断了,所以他你就慢慢想就行,就是如果你当前这个收集器是空的。对吧,Les是空的,那我这时候怎么办?哎,对,我是不是就往它的占底去,不是那个那个那个那个就往那个结果数读,因为它空的,它没有占。啊,判断站队列啊,占这个队列。啊,当前情况,哎,然后如果是空的,那我就往这个结果当中,我去放这个tons,但如果不是空,我就要往站顶。去放。对吧,哎,往占领去放,那占领去放是什么?那不就是呃,你你你你你的那个sections中的sections的lengthns。
17:03
减一最后这一项嘛,然后我在的最后这一项的第几项下标为二那项。因为就相当于这里放了一个token了,是当天你循环迭代的就是那个驿站井号了,然后我不是已经给他开辟好这个下标为二这项了吗。是吧,我就要往这里放这个token啊,我就不能去,对不起,是token啊,我就不能再去往结果数组中去放了。对吧,哎,大概是这么样一个情况,但是呢,这个地方你看不对,他这个时候就只收集了一个。T,这个div和这结束中间的部分都没了,那中间部分为什么没了?原因很简单,对,因为你遇见这个杠的时候,是不是要把当前它的这个这个东西加到na tokens中啊。对吧,就是你这个token这一项,占顶的这一项一直都没有进。懂吧,哎,所以说这是section,就这表示出站啊,然后section变量现在呢,就是pop函数,大家一定要注意啊,Pop会返回刚弹出来的这一项。
18:04
啊,会返回刚刚弹出的项,所以这刚刚弹出的这一项其实还没有加入到结果数组中,明白吗?刚刚弹出的像还没有加入到这个结果数组中。懂吧,刚刚弹出的像还没有加入到这个结果数组中,所以说。对,我们就需要再让这一项啊把它。把这个push进去。哎,Push到这个刚刚弹出的这项就是section啊,就直接把它这不是刚刚弹出的吗?或者叫section pop吗?这不都行了,看到没有。哎,那这样的话,你看这结果就差不多对了,你看。展开之后。是吧,哎,那就是T斯塔,然后一个div,那这块其实先要遇见students,那他怎么就遇见一个井号item hobbies了,发现了吗?对吧?哎,然后你看这个这个item hobies,然后里头收集的是item hobies这些东西,力点力没问题,但是你遇见这个students,你看你就懵了,因为他这里完全不对,是不是应该是students这个里头应该有这个hobbies啊。
19:14
对吧?哎,这里不是递归啊,大家不要想错,这里不是递归,只不过层次比较复杂。啊,层次比较复杂而已。对吧,那什么意思呢?所以说你现在就会要明白啊,遇见了这个井号,你看咱们先是压战啊,没问题,就让他从队尾去进好,然后呢,咱们先判断判断战队的刚才情况,就判遇到了一个文字啊,文字内容对吧,那实际上你会发没发现,其实你不光遇见文字内容,是不是遇见这个井号。他是不是也有这个关系?就是你遇见井号,因为你遇见,比如说你你你看啊,这原来的,这是你遇见这个井号的时候,是不是也要判断当前站是不是不空,所以说这里也有一个if附语句。发现了吗?这里也有一个一辅语句啊,这里有一个一辅语句,就遇见一个井号。
20:04
哎,然后我们就需要往啊,它的那个那个呃,压站嘛,哎,所以说这个井号等于说也是也是也是要往这儿去放的。啊,那所以说不是说这儿有一个是说,因为你遇见个井号,它是压站操作这一项,等于说你要进去啊。对吧,这一项你要给进到那个里头去啊。明白吧,哎,所以说没问题吧。对吧,所以这个时候我们就需要在这里,它这一项要加进去啊。那我们就需要给他写一个叫sus的,然后呢,呃,占领的这一项啊,但是他已经入站了,所以占领这一项就是他自己。看见没有对吧,Sections当中已经push这个token了啊,那我们现在就可以往N当中去push啊。把它给铺设进去。好,我们继续再来看。看这回是不是就大概对了,但是呢,你看还是有点毛病,这是井号students对吧,这两项是不是还是没有进去。
21:07
那也就是说什么呢?也就是说咱们编来编去都是失败的。啊,变来变去都是失败的,为什么?因为你现在混乱了。就是大概意思,你知道怎么回事儿,你大概意思知道怎么回事儿,但是呢,你这块没编好。啊,咱们一直都没有成功,就一直没有把这个里头的这项给它嵌套进去啊,就一直没有成功。那为什么没成功,哎,这个地方啊,就少了一个编程的窍门,刚才老师在这里写了个注释,就一直没有往下写,因为如果我写的话,其实呢,不能让你信服,但现在你就知道了啊,让你信服了,就是我们这块写的呢,是很乱的。对吧,哎,很乱的。发现了吗?对吧,哎,我们这里确实是写的是,呃,我们在这里确实写的是很乱的。啊,确实写的很乱。啊,那为什么,因为咱们在这里呢,边程没有一个小窍门。
22:02
哎,还有一个东西没有出来,所以你这样写的话,他就收集就很难,很难收集出来。啊,那咱们现在呢,就要给大家隆重介绍啊,它的官方包中是怎么实现的啊,官方包其实老师一直在打开状态,哎,就他有个官方包,这个官方包我们给大家挪过来啊,给大家看一下官方包。这是他的官方包。官方包呢,它有一个特别奇思妙想,就是它定义了一个collector这个变量。看见没有collector这个变量,而collector呢,咱们它充分利用了JS的一个引用类型值的特性啊,引用类型值的特性,引用类型值就是它把你要返回的这个nasty to就是你的结果啊,嵌套好的这个数组存为这个变量。那现在等于说这两个变量collector collector表示收集器,对吧?Collector和nasty token。它是不是就是同一个数组啊。能理解吗?就是collector和这个就是同一个速度。
23:03
这个能想清楚吧,对吧,然后接下来的话呢,你看它这这个section还是占。啊,然后他这个啊,当然它这个这个原文中有一个这个尖角号啊,不用处理尖角号啊,因为咱们现在是做一个弱版本的啊,不用处理这个尖角号。哎,不用处理它,那你有没有发现就是我们遇见井号了,就让collector收集器当中push token,那这个收集器可能是就是nicety to,也可能不是,但一开始是因为我们用等号引用类型值嘛。对吧,然后往站里扑他。然后这个时候再收集器,就是收集器指向的这个数组,收集器指向的这个数组是不是就是当前你加入站的这个数组。它的下标为二这项啊。标为二这项啊,啊,因为它原来是四,但其实是二啊,就是咱们这里没有那个位置坐标嘛,哎,就创建出一个空的啊,它可以用连等,连等就指的是让这个空等于它,再等于它。对吧,那么出战的时候我们就让他直接谈战就行了。
24:03
啊,出战的时候直接让他谈战就行了,是不是非常非常的方便啊,非常,然后这个SECTION5这个不用管,这个就其实是坐标编号,这句话就没有用,然后再让这个or,那这个collector,这个时候就需要重新的收集器,就要重新的指回什么意思呢?就相当于我如果说遇见了一个students啊,咱们看着,那这个时候收集器就需要指向这个数组。懂不懂?哎,收集器就需要指向这个数组。啊,收集器就需要指向这个数组啊,Collect啊,当然这个变了。啊,我们把这个他一开始没有这个数组,我们把它给注掉啊,这个负循环一会儿重新写吧,就这块儿咱们写的很乱,一会儿重新写啊好。注意看,就是收集器,就是这个数组。对吧,好,那如果说你又遇见一个井号,那收集器是不是变成这个数组。能理解吗?就一开始collect拉是他,然后后来collect拉指向他,错讲错了,就一开始collect拉指向的是最终的那个结果,就一开始的第一层,遇见一个井号克拉变成他,再遇见一个井号克拉变为他。
25:06
能理解了吗?对吧,然后谈战之后collector再回上一集。对吧,然后在在盘战之后,克拉德就回到结果数组,那这个回这一集,它实际上在圆啊圆的这个啊代码当中是用的这个三元运算符来看当前站还有没有东西,如果有东西就是占顶这一项。对吧,啊,当然占领了这一项的这个。啊,如果没有度是吧,就是就是到这个地方。啊,如果没没有东西的话,那就是它的结果这个数组嘛。有没有发现这个这个代码很清晰,所以说这就是源码的魅力。啊,但是你有没有发现咱们老师带着你,甚至老师咱们提前是见过这源码的啊,老师提前都见过这源码,那为什么老师刚才还带着你推呢,推了一个错误的,这就告诉你,你的思维受限在哪里,那么以后的遇见这样的算法的一个东西的时候。以后你再遇见这个算法的东西的时候,其实。
26:01
啊,就就说白了啊,咱们就说句实在话,就是你就会了,就以后再遇见你就会了这种思路了,因为在这里如果用if语句空判断的话,你会很乱。对吧,哎,因为因为collector。它的这个这个井号,它这个地方还要影响一个收集器。啊影响一个收集器,当然你说老师你这么一副写,你统咕捅咕也能对啊说你说老师你你继续沿着这个一副语句这个思路啊,统咕统咕啊,其实也能差不多对了,但是。肯定不如他原原来的这个好。能理解吧,哎,肯定不如他的原来的这个好啊好,那咱们现在呢,就。哎,咱们也不把这个负循环删了啊,咱们就直接给他。对吧,哎,直接给他删掉啊。好,然后咱们重新来啊,把这个地方写按它的原来,所以这块需要一个收集器。明白吗?哎,然后让这个收集器呢,一天生collector啊collector,哎,天生就等于你这个nasty tokens。
27:00
啊,收集器它天生是呃,指向nice nicety tokens啊。这个结果数组。啊,那么引用类型值啊,所以指向的是同一个数组。没问题吧,对吧,引物类型值,所以他们指向的是这个同一个数组叫naty naty这个tokens嘛,指向的是同一个数组嘛。没毛病吧,哎,Nice tokens这个就是指向的是一个同一个数组,叫收集器。啊,指向的是同一个数组,叫收集器。对吧,好,那这个收集器的话,我们现在怎么办。对。是不是很简单呀?哎,是不是这个地方就很简单,那这个地方我们就是遇见井号了,我们这个时候要干嘛。因为你收集器现在指向的是谁,指向的是结果数组,那不管是不是指向结果数组,那实际上都要往这个你当前收集器当中去铺设这个ton。
28:03
啊,因为这个收集器还会指向什么,还有可能会指向这个数组,对吧,它是不是一个数组,所以收集器可能会指向它,可能会指向结果可能会指向它,也可能会指向它的下边为二的项目,这都是收集器可能指向的数组啊。对吧,但不管怎么样,你这样写的会很抽象,就是收集器当中放这个token。好,哎,等于说往收集器中放入这个to。那不仅收集器中要放入这个token,那是不是咱们站还要入战呀?咱们预站井号肯定要入站呀,所以这个时候我们就需要把它给入站。啊入战,那不仅要入战的话,我们这个时候还要干嘛,因为你你遇见了一层井号,这个时候这个收集器是不是要换人了。啊,要换人了,就相当于是过河拆桥,你刚往收集器当中放入陶肯,然后收集器要换人了,这两句话不能,这两句话不能颠倒,因为你不能先换人再放入他,是不是要在老人的时候放入这个token,然后收集现在换人。啊,所以刚才那个咱们一开始那个井号其实没写没写特别好,就是因为这一块啊有点乱。
29:06
对吧,哎,就这块儿有点乱。啊,收集器当中要放这个人了,你必须要有个collector,你要没有collector变量,那没法办了,然后collector现在要变人了。Collector现在要变人了,要指向你这个token的下标为二这项了,啊,下标为二这项,咱们要给它等于。等于这个红数组,然后让这个collect等于它,对吧,那你也看见了源码是不是写了一个连等。看见没有,哎,卵等啊。A。要换人啊,那也就是说给这个token呃,添加。下标为二的项。并且呢,让咱们的收集器呢,指向它就行。啊,卡拉指向它就很很简单。然后遇见这个斜线了,我们就要出战。啊,我们就要出战。出站的话,我们就是呃,用sections的pop。
30:03
然后刚出的这个元素,我们就管它叫section下划线跑。写一下注释,那么泡泡方法会返回啊,会返回刚刚弹出的这个项。对。哎,然后接下来呢,我们就需要出站之后是不是还需要改变,哎,改变收集器。就是改变收集器为。咱们这个站结构的上一层啊,站结构。啊,对尾。对尾,因为对尾是站顶,大家一定要注意啊,对尾是站顶。啊,咱们这个因为是push进去的,对尾是站点。啊对尾那下的下标为二的数组吗。所以这块很抽象啊,但是我觉得老师觉得可能讲的还是比较清楚啊,如果大家觉得这块讲的不是特别清楚的话,可以通过留言啊,一种方法啊,咱们后边可以再通过啊,补充视频的形式,把这个再给大家讲讲,但是还是希望大家能自己去盘一下这个逻辑,你会觉得它很清晰,就是你要知道他要做什么,这块算法很精妙。
31:11
那这样的话,我们就需要写一个判断,就是因为你collector,它不能直接就等于sections。啊中下标为的。哎,减一这项的第二项啊,第二项为什么?因为他不一定这个站中有东西,所以这个时候要判断一下他的Les是不是有。如果他这个时候Les是有的。对吧,哎,他是站里有东西,那就是最后一项,如果没东西,那是不是就是结果。啊,就叫指回最大的这个结果数组叫na啊。Nasty talks。没问题吧,哎,那那普通的时候是不是就直接往这个收集器当中去push这个ton。看见了吗?那这个时候就很很很清楚,因为这个collector可能指向什么,对,它可能指向nice的结果数组啊,也就是说这个收集器会变化,收集器会呃的的指向。
32:07
会变化啊,因为它充分利用了引用类型值啊,一个特点啊,它可以指向另一个数字,当遇见井号的时候,那么收集器呢,会指向。这个井号啊,指向这个token的下标为二的新数组。明白吗?哎,就行了。所以这样做就OK了,那咱们这个结果呢,就真的出来了,你看多干净三项。为什么是三项?因为咱们这个文字不就是三项吗?一开始是divol,你看divol吧。没问题吧,DOL。没问题吧,哎,然后是这个students。井号students没问题吧,然后text的杠L-div没问题吧,对吧?哎,没问题吧,然后这个students里头是五项啊,Students这里头是五项,那这哪五项咱们一开始都学过,这个利学生这是一项,这是第二项,这个的爱好是OL第三项,这个是第四项对吧?其实这里头整体是第四项啊。
33:09
哎,然后这是第五项,那你看它已经折好了,没问题。并且最精彩的是这项,这个井也已经折好了。看见了吗?这个井也已经折好了,这个井艾他们的hobbies,你看AR3它是不是就已也已经把这个往里头折好了,一个力一个点一个杠力啊。所以遇见这个时候的话,其实你是很激动的啊,你是很激动的,就是你真真正正的把当前的这个模板字符串已经变成token了。啊,那说白了就是你的啊,变成合法的tons了,嵌套你看嵌套多美,这跟咱们PPT上要的是一模一样的,咱们可以看一下之前的PPT。对吧,哎,循环状态存在的,你看不就是这个talk一模一样。一模一样啊,它是一项两项三项,然后下标为一的这项又有这个子元素,然后它这个又有子元素就嵌套好了。
34:03
真的是666啊,真的是66666。那接下来的话,我们是不是就需要做逆运算啊,就是把数据结合它,然后怎么把to展成do母对吧。哎,那这个算法其实给大家提了个醒,就是说你不能光闭门造车,如果闭门造车的话,不去看它的原文就是呃,这个这个咱们这个这个马Dutch啊,它的源代码啊,官方源代码的话,实际上你闭门造车的话,你容易犯错。啊,所以说你有没有发现很美,包括这句话就collector的push非常美,就是你甭管当前collector是谁啊,就是说你甭管当前的这个collector是谁,他可能是可能是结果。对吧,就是结果最大的那个na tons,当然也可能是什么对,是某个token的下标为二的子数组嘛。
35:00
哎,但是呢,甭管是谁啊,就咱们写下叫甭管是谁。甭管是谁啊,那么我们就推入。Collector即可。哎,就特别清楚啊,这个算法,反正老师个人是打心眼里佩服啊,就这个collect这个东西。啊,大家自己要去琢磨琢磨好,那我们从下个视频开始呢,我们就需要把tokens变回DOM数组,对吧?哎,DOM字符串啊好。
我来说两句