00:01
好,咱们在上一个视频当中呢,我们把lookup函数呢,咱们给它写完了啊,Lookup函数写完了,那么这个结课呢,咱们就需要开始写这个递归了。啊,写在这块遗留的一个递归,那这个递归是什么呢?实际上就是咱们之前你看。啊,他能把T给进行处理了,内幕也能进行处理了,但是这个井号它没有处理能力。那井号的处理能力呢,它就需要什么,对井号的处理能力,它就需要你再去递归啊这个。这个数组啊,递归这个数组啊,递归这个数组。对吧,那在这个时候呢,我们先去说一个小问题啊,咱们之前呢,也出现了一个小bug,老师刚才发现了,就是我们的模板字符串当中啊,在循环一个数组的时候啊,是must touch的语法是直接写这个的属性名的。啊,就直接写这个对象属性名的。咱们一开始强调了,这里不是item点啊。
01:02
这里不是item点。啊,咱们之前是写了什么item.item点啊。那其实呢是误会啊,是不加STEM点了,这个老师刚才呢在课间啊发现了这个bug,那所以说item点要去掉好了,那这个bug呢,不痛不痒。啊,发现就可以了。那所以说现在呢,你这个模板字符串生成的这个它就不对。啊,它就不对,为什么不对呢?因为你这个井号没有解析能力。所以我们现在呢,就需要对这个井号来进行一个解析。啊,就需要对这个井号有这个解析能力。那这个递归也比较复杂啊,也没有那么复杂,但是呢,我们尽量不要嵌套写负循环。啊,就是我们最好在这里是不是再去给它创建一个新的函数。啊,再去给它创建一个新的函数,不过这个函数呢,没有必要单独写出去了。哎,没有必要单独写出去了啊,单独写出去其实也行。啊,但是容易啊,单独写出去吧,咱们单独写出去吧,那这个函数呢,咱们就管它叫做呃,处理这个数组啊,那咱们就管它叫做pass啊,就处理数组啊瑞。
02:13
哎,那这个等于说就是处理数组。啊,数组的这个,呃,就是结合啊,咱们这个render template,然后实现递归。啊。这样的话咱们更清晰啊,Expert default,暴露它。哎,我们暴露他。好,暴露它的话,那这个函数收什么?这个函数啊,要收两个参数,第一个参数是token,第二个参数是data。啊,第一个参数是to token,第二个参数呢是呃,Data啊是这样子的。塔。那一定注意,这里收的是token,不是tokens。啊,也就是说相当于注意啊,这个函数收的。
03:03
啊,参数是偷看。而不是tokens token是什么?Token是什么?就是一个简单的啊,一个这样的形式,第一个比如说它是一个啊,第一个比如说是个井。对吧,当然这个一会儿我会外头会去循环它。啊,我们会去,呃,循环处理它,就是里头会去循环处理它。明白吧,哎,就是一个景,那肯定是个景,因为它是个数组啊,然后这层是students。对吧,哎,然后这又是一个数组。这是一个token,这是一个token,因为tokens是外层再有一个方括号啊,然后它有好多项,但是呢,Token不意味着它没有子项,这是一个token,就是一个简单的一个token。啊,它不是一个复杂的,就是它是其中某一部分。啊,而是他这一个进来。对吧,哎,这样的,那它肯定会有子项,这里会有子项。
04:00
是这样子的。好吧,哎,那所以说我们给他输出出来,Token和data,我们都给它输出出来啊,那这时候我们就需要在这里引包。哎,引包,那我们在这里呢,就处理这个井号,那处理井号很简单,我们就让result是不是加上你调这个函数啊,那这个时候你要传什么给他。啊,你要传什么给他,对你是不是要把当前的这一个token传给他,那就是token项的,呃,我看看啊,啊对token这不提出来了吗。当前的这个陶给他。对吧,然后还要给他data。啊,得塔不就是这个德塔吗?把这个传给他。看到了吗?那这里就应该能输出啊,但是这报错了,他说啊,Resultt啊。哎,这就出出了,你看他是不是拿到这个token了。拿到这个数据了。啊,咱们大家注意看这个数据是这样子的,这是数据,这是ton。
05:05
啊,那什么意思呢?就相当于这个函数现在返回的东西。就会被加到最后结果字符串中,哈哈,我是一个数组,你看没有。那这样它就被返回到最后结果字符串,这是最后的结果,是不是divol?哈哈,我是一个数组啊。对吧,因为你的这个最终测试的这个地方,它不是一个数组吗。最终测试的这个地方,它是一个数组啊。没毛病吧?所以现在它是什么意思呢?所以现在呢,他就可以有一句说一句,就是相当于你现在就要把思路局限在这个数组的解析上,那这个数组怎么解析呢?很简单,它就要递归调用这个render template。啊,就相当于他要递归调用它。啊,这块千万别。对吧,那递归多少次呢。递归多少次,要靠德塔决定。
06:01
对吧,递归多少次,就是它的一个机制是什么,因为我我这里不是这里头不是有那个students剩的token吗。对吧,也就是说这个函数要递归去调用也对吧?哎,要去调用啊,或者你别说递归调用了啊,就是递归调用,递归调用render template这个函数。那么调用多少次?你千万别蒙啊,这块千万别蒙圈啊,那么调用的次数由贝塔决定。贝塔决定明白吗?什么意思呢?因为你看你这个力它是一部分,你是不是最终你要生成有三个学生要生成三个力呀。所以他需要把这里边儿的东西要递归调用三次,那也就是说这个students速度长度是多少,就需要递归调用多少。能理解了吗?对吧,比如咱们这个data的形式啊,我把这块咱们写写注释。
07:04
啊。对吧,哎,比如data塔的形式是这样的。啊,那么。咱们这个PAR ara函数就要递归调用render temple函数三次,因为数组长度是三。看见了。为啥?因为你这个是一个独立的数据项,然后我要去去调用一次。对呀,因为这内是是是小明hobies的使用有限值,那是不是这个东西就可以独立的当做我这部分中间的那个模板来使用啊,这个数组大家千万不要认为是个数组,这是一个它内部的一个tos。啊,你看这个students这里头大概是什么,你看他这里头不就又text的什么力学生内幕什么这些东西了吗?看见吗,他这里又是这些东西了。所以就相当于我在这里又需要先拿到这个data。啊,又需要拿到这个data。
08:00
看见吧,哎,那所以说我现在这个函数也需要lookup函数。啊,他也得需要lookup函数,咱们不是刚刚写了一个lookup吗。点杠lookup.js。对吧,那我这个时候我就可以把这个值拿到啊,我现在就可以用这个V,就等于lookup,我这个data中的啊呃,我这个token。啊,我想想啊,呃,Token中的方一不就行了吗?因为你token中的一不就是这个吗?不是它的那个数组名字吗?所以得到这个,呃,这个数据啊,数据中这个数组要使用的部分。啊,得到整体数据中,整体数据data中这个数组要使用的部分。对吧,那我现在可以把这个V给大家打印出来,你看那这个V是不是就这部分。对吧。好,然后接下来我要干什么?对,这地方又要拼一个小字符串,因为它要整体返回一个字符串,所以这里就是它的一个结果字符串,你千万别蒙啊,就是这里是要有个结果字符串的,这个结果字符串是它的小结果字符串,这个小结果字符串被返回。
09:13
千万别蒙它被返回之后呢,会交给这个结果字符串连上。啊,会交给这个字符串连上。啊,所以这里这个结果字符串它需要怎么生成呢?它就需要去遍历。哎,他就需要去便利咱们这个V啊,V数组,V一定是数组啊,当然V也不一定是数组,因为咱们之前说过井号后边这儿呢,你看。井号后边可以跟布尔值。看见了吗?就井号后边是可以跟布尔值的,但是咱们咱们这个上硅谷这个小的模板引擎不做这个井号后边跟布尔值的情况,井号后边一定是数组。明白吧,所以这个时候要便利这个V,你你明白吗?就是他这个有点不难,有点难想啊,这也是咱们要写的最后一段程序了。
10:01
啊,也是咱们要写的最后一段程序了,就是确实比较难想,那你这个resultt它是不是要去加上,加上什么呢,大家琢磨琢磨。对,他是不是要加上对这个模板的处理,就是这个数组中模板的处理,那这个数组怎么处理,那刚才这个render。不是已经可以处理陶斯和data了吗?所以这块就有了一层递归,在这儿就递归了,当然他自己不是递归他自己,而是他递归这个人,而这个人呢,又会引发他。看见没有,它会引发调用passrra函数,就是randomnder template的函数会引发passra函数,而passra函数又会引发它,那你说老师不是死循环吗?不会死循环,因为它便历结束之后调用就回了,就一层一层回了。那他token是什么?Token是什么?对,Tokens不就是这个token的下标为二,这项不就是它的tokens吗?对吧,那值是什么值不就是个V吗。
11:00
那你看这块就基本对了。啊,但是这个render template他报错了,是因为我们没那个啥没引包啊,那你说老师他俩不是循环引包了吗?A隐BB引C,没关系啊,A隐BB引C。咱们的。外派会自动处理这种情况啊,哎,OK了。啊,但是他这里报错了,报错的原因是什么?报错的原就是这一层肯定对了,你没看吗?他已经便利到hobbies了。就是就是students这一层已经对了啊,我向大家保证,Student这一层已经对了。啊,就这一层已经对了,但是。你明白吧,Student这一层已经对了啊,那你凭什么说student这一层对了,咱们可以试一试啊,你看啊,你会很激动,比如说我们现在把这个div,哎,咱们现在就给它改的简单一点啊,就改成这个,呃,Ul。你看啊,你会很激动。然后力。诶,我记得PPT上有这个例子。
12:02
咱们就改成最简单的啊,就这个。就改成这个基本信息,就咱们先不来嵌套,就不来数组嵌套,刚才那个不是还有爱好吗,咱们不来爱好。啊,就是姓名年龄性别,没有爱好对吧,那这个。邵老师觉得对了。邵老师觉得这已经对了,咱们试试看。好。咱们试试看啊,在index中测试,当然这是AR,改个名啊,或者叫students,这个改成students students,然后这是name,咱们注意看刷新,你看怎么样,对了吧。对了吧,没问题吧,就他大概是对,那他为什么会输出这么多次,因为他每次递归都会输出,你看最后的这个结果,他是不是已经生成了三个力。看见了吗?已经生成三个力,那为什么能生成三,我知道这里头是氨基范,咱先别着急,先别着急,这里头为什么是氨基范?兄弟们啊,咱们看为什么能生成三项,因为咱们在这儿便列了三项,就这个数组长度是三项。
13:03
啊,速度长度是三项。哎,那为什么他这个地方是安地范。啊,为什么安迪法哦,我知道了,因为你这是V是一个数组的那部分嘛,那V的第I项,这个I没用到,是不是V的第二项啊,因为我要把这个这一行单独的当做这一次渲染的数据。然后我要把这一行也当做独立渲染的数据,然后这一行也当做独立渲染的数据,明白吗?所以这回就应该对你看看这是不是就渲染出来了。对吧。啊,这就渲染出来了。啊,当然了,我们直接给他弱化了,直接改成一层了,那个hobies被我们删了,一会儿我们解决这个hobby嵌套的问题。啊,Hobbies,看见没有?哎,就这个。所以这个就解决了。看见了吧,这个就解决了,你看这不好了吗?Div,这不小明小明男12吗?所以你就豁然开朗了啊,所以这块是特别难想的,这块非常难想啊,注意啊注意,就是下面这个循环可能是咱们整个包中最难啊思考的一个。
14:15
呃,11111个循环啊,就最难思考的一个循环啊,就是说它是便利咱们的数据,而不是便利tokens啊,便利数据啊,便利这个数据。啊。因为你数据有几条,就需要渲染to的几条啊,数数组中的数据有几条啊,就要便利几条对吧?哎这样,那但是呢,他这有问题,有什么问题呢?就是说如果我这个数组更简单,它不是这种对象形式。啊,比如说这个数组更简单,咱们之前不是有一个水果。叫水果丝,比如说等于苹果、鸭梨。对吧,然后香蕉。
15:01
那这个水果丝。我这里立是不是要去写点儿啊?看见没有,要写写这个点啊。那这个时候他就会报错。他就会报错,为什么呢?为什么会报错,因为你这个水果丝它确实能便利,你看没有这个点它绝对不报错,你看是不是把这个水果给立立立下,但是你这个点它识别不了。你这个点它识别不了,它这里头是普通值。所以他这个点为什么识别不了,是因为你给他的这个数据当中没有点儿这个词。你懂什么意思吗?就是。你给他这个数据是没有点这个词,就是你要把这一项你要单独的给他。这块是特别难想的,你别看这句话就一行,但是这一行可能特别难想。啊,那我怎么样把这个点儿能给到他呢?对吧,所以这里这里这里要补一个点的识别。啊,点点属性。
16:02
明白吗?这什么意思?我给你举个例子吧,比如说我现在在这里写个点,看见没有点,点的值呢,是个五角星。那现在就比较有意思了,那现在是不是就相当于他会把这个tokens的第二项。啊,然后呢,里头的数据都会解释成这个点五角星。哎,都会用这个点五角星来去来去来去处理。啊,但这块还是报错,我们看看是哪报错啊,还是报的账,说明你没有这个键的键名。哎,就是为什么会报错,咱们盘一下啊,你这个水果四水果四肯定能得到嘛,啊,你这个token现在生成的很对。哎,Tons,这不是水果丝。没问题吧,然后这是数据,看见了吗?这是数据。对吧,但是这个数据当中特别麻烦就是这个点,因为它没有点这个符号嘛。所以它就生成氨基范了,然后下一个他就得不到了。啊,它没有点这个符号。啊,那你说老师你不是现在已经把这个点给他了吗?那但是这块还是在报错,他说不能得到一个空属性和安地范啊,我们看看是lookup错了哦,因为这块发生了美美妙的误会啊,什么美妙的误会呢?就是说。
17:12
我们这个lookup函数没写的特别对啊,他说看看key name中有没有点符号,但是呢,它又不能是点,明白吗?哎,就是它不能是点这个,因为但是不能是点点本身,因为你会把点传进来,那那你这个时候不就相当于拆这点嘛,拆这点的话,Kiss不就是个公数组吗?所以这块有个美丽美丽的误会啊,就是key name,它不能是点本身,因为这个点跟这个点此点非比点。我们这里的点指的是那个数组当前下这个点是不是指的是那个a.b.c那点啊。看见了吗?所以这回应该不报错,诶,太好了,你看三个五角星出现了。啊,老师用这种方法是不是就给你明白了,就是我们现在把这个TOKEN2啊,就是它里的那个子token。
18:01
啊,然后我们用点等于心来。注入他。啊,那它为什么是一个星,然后变变成两个星三个星,因为它是一层一层叠归叠,呃递归的嘛,我们可以把这个cons.log删掉了啊,就看最后生成的这个。哎,就看最后生成的这个,其实之前的cons log都可以删掉了。啊,咱们就看最后生成的这个。这些康点蜡都太复杂了啊,就老特别乱,好了,就看最后生成的这个。好,没问题啊。它是循环递归的,你看。那这三个点,那你说老师不对呀,它这个不应该显示五角星啊,他应该把苹果,鸭梨,相蕉分别写进去啊,这个点对,那它现在没有点这个符号,所以这个点我们就应该替代成当前项嘛。你懂吗?所以这个点就是当前项,那当前项是什么?不就是V的I吗?V的I不就当现象吗?那这样一下,你看是不是苹果压了一橡胶就进去了。对吧,但是呢,你你这个你这块这么写了很开心。
19:03
啊,你这块这么写点VI对吧,哎,点VI,咱们刚才是写的是VI。刚才不是写的VI吗?现在写成点VI了。你看啊,就是你写成点VI这个苹果压梨香蕉这例子好了。但是你那个同学名字就坏了。你懂我意思吗?这同学名字就发了,就是你再给他变成同学那数组啊,Students。然后干死students。哎,然后这边呢,就是同学的那个名字啊,Name h。你看这个数组基本上就就就就不能用了。它不能两全,就一边能识别点啊,这是A同学啊啊,然后age咱们节约点时间,咱们瞎写啊,Sex是难。好,然后B同学,然后C同学,11岁啊,都是男生得了。对吧,那你看这个时候他又崩了,又是氨基饭了。看见没有,又是了。啊,因为这里不是点,这里是对象,刚才是简单数组,这里就是复杂数组了,那这个时候它就不能写这个点了,它就又要变成这个微景了。
20:07
又要变成V了,那这回他是不是就好了,你看又好了。所以你就会发现,对于复杂数组,VI就可以了,它是一个数据对象。对于简单数组,你要给它变成点V。你要给他补一个点属性VI嘛,这块咱们讲的很清楚。所以那怎么办?那不能两全了怎么办?对,很简单,就是你这个对象当中。给他添一个点这个属性。是它本身,然后再把它原来的这个对象打开点点点大家知道吧,是不是展开呀。写在这对象上,那就相当于什么呢?就相当于我们现在这个对象是VI的展开。啊,就是说现在这个数据小对象是VI的展开,那么就是VI本身嘛,相当于给他浅克隆了一下啊,然后补充一个点属性。
21:05
对吧,补充一个点属性。啊,让点属性等于他自己。啊,或者咱们大家可以这样啊,就是V的Di项,然后在这里给他补一个点属性,那就让V的Di项给他补一个点属性不就行了吗。对吧,等于它本身不就行了吗。就把它本身存到它的点属性里。然后这块不就是它吗。对吧,哎,然后拼接返回,那这不就这好了,然后咱们再看看能不能适应这种。啊,能不能在index当中适应这个苹果啊,苹果鸭梨香蕉的那个那个数字,我们再给撤销回去啊,咱们这个好好累啊是吧,好累啊,你看注意看啊。成败就在这一区。刷新你看。他这点按苹果还是有问题。啊,水果还是有问题。所以这块还真不能这么补,因为你这个VI它是普通值,所以还真不能补啊,真不能补的话,我们还真得按刚才老师这种写法写,就是他要先。
22:03
把它展开,V的D项展开,然后再去补一个点属性。为啥?因为有的时候它是普通数组啊,普通数它不能带。普通词是不能补点的。对吧,哎,然后再把它给补上去,低压项本身这回应该不报错,你看这不对了,苹果压力橡胶好了。对吧,苹果压力相交好了之后,然后复杂数组也行了,甚至咱们不骗大家就是。第就是多层数组都好了。啊,你说老师真的吗?真的,咱们来试试看。啊,咱们直接来试爱好这个。啊,咱们直接来试验这个爱好的这个这个这个这个数组啊,我们来直接试验一下它。别着急啊,我们直接来试验一下这个爱好。还在这儿呢,抄一个模板引擎模板字符串抄一个。看见没有抄一个啊。
23:00
好,因为它递归已经写好了啊,我还是有这个自信的,然后数据呢,诶数据呢。哎。哎,这数据是图,哎哟,气死我了啊,这数据是图,那咱们就重新写这个数据啊,应该是好了,没问题。哎,咱们再手打一下那小明。对吧,AGE12岁啊,没有age啊,跟age没关系啊,那就hobbies。哎,咱们来看编程游泳。啊,游泳,他的爱好是编程游泳,然后是小红小强。好,小红的爱好呢,是呃,看书,弹琴。啊,画画。哎,小强的爱好呢,是锻炼。他就一个爱好是吧,刷新咱们看一下你看。
24:02
是不是好了?对吧,哎,就彻底好了。啊,咱们的程序编完了。啊,恭喜大家,贺喜大家,咱们这个包上硅谷这个template store啊,Temp的这个东西这个包。哎,就正式的就是编完了啊,就正式的就是编完了啊,非常的好。啊,为什么它突然间就变完了呢?为什么突然间变完,不是突然间变完,因为你一层循环处理完了。啊,那么里头的循环它都靠递归了,对吧,因为你看这儿这儿是不是又又掉render template嘛,那render template的话就会便利这一层to。啊,那这一层套肯定有text,有name,有景,然后他就便利下去,便利下去之后如果遇见景了,它又再进去。看见了吗?又在进去之后它就再去掉,所以一层一层的就解析完了。对吧,哎,所以你看咱们这模板已经就写完了。啊,这模板已经非常的好用。
25:00
为什么很好用,因为它真的是,就是,呃,当然这个lo可以删了啊,那就没有输出结果了,我们可以在这index这输出,这是道姆。对吧,直接输出。哎,输出盗。你看诶。他这有bug啊,看一看。Return。啊,没刷新吧,诶这好奇怪啊。看看这个render是不是没有返回值啊。哦,Render,没,哦,对,Render没有返回值,非常抱歉啊,Render do姆的,这忘写了,你刚才对吧?所以说你看这个render方法非常的简单,它就两个函数,第一个是把模板字符串变成token,第二个是把token再变成do字符串。对吧,哎,然后他就返回这道它就能能用了,所以咱们这个程序就突然好了啊,当然不是突然好了,是因为你递归写明白了,一层一层的写明白了,你这个井号pass瑞对吧?哎,然后你这个pass瑞里面呢,再去递归回来非常的简单,所以这个函数很简单,你看。
26:08
啊,很简单,这个就就生成了。啊,生成了,生成了的情况下啊,我们在这儿看一下。哎,这个可以改成无序列表ul ulu。那你觉得怎么办?对,是不是这就可以放一个container。对吧,哎,然后让container中的这个内部啊,让这个container中的这个内部的这个得到container啊。内部的inner HTML等于它。对吧,哎,然后我只要让他的inner HTML。等于道姆斯特就行。啊,等于,然后这个是渲染上树。这不就看见了吗?是吧,那这有好多空,这有好多空的原因是我们在这儿啊,就很多空。你看这里是不是好多空格啊?
27:01
这是因为你最后生成的这个道姆特,它是有问题的啊。你看你最后生成的这个道姆,它是。有空格的大家发现了吗?啊,所以它可以把这些空格都去掉,因为空格是不影响HTML的识别的呀。就任何空格都是没有意义的,这里任何空格没有意义的。明白吗?啊,当然了,这里边如果这个标签上有属性,那这个空格是有意义的。你明白吗?就是比如说这个标签上有属性,这个地方有个class啊,等于item啊,叫叫,比如说叫买力。哎,那这个空格是有意义的啊,那其他的空格都是没有意义的,那这个文字的空格是没有意义啊。懂吗?所以这个时候我们其实在收集token的,就是转成token的时候是有点问题的。啊,就是这个地方words其实可以去替啊,把那个空格给替换掉啊。哎,存起来,然后去掉空格啊,那么在它的原啊。它的这个。
28:01
呃,就是官方的那个包当中呢,咱们最后总结的时候再给大家说啊,其实会有专门的一些空格的处理函数,我们在这里就简单写啊,把所有的空格替换成空就行。哎,那你看这回是不是就很清爽。看见了吗?生成的很清楚,然后这个力,你看这个空格没了。发现了吗?哎,这个力这个空格没了啊,但这个空格就必须要有,那不能没有。所以说它这个还挺复杂,就是说我想如果说我真的是想想去处理这个空格的话,那你这个空格你是不能去掉的。这个空格你是不能去掉的,我只能去掉的是所有文字中的这种啊,文字中的这种,呃,就是这个这这个这个这个这个这个空格啊,所以说你这个去空格这块的话,还得有点小算法难度,还是有点小算法难度的。啊,这样的话,你看你的HTML非常的干净。看见没有,但就是这个克拉没了。啊NBSB,哎,那这个逻辑,因为它比较难啊,咱们可以输出一下这个words,告诉大家是怎么回事,你输出这个wordss你就明白了,你看。
29:08
对吧,他要判断当前这个空是在哪儿,你要遍历这个word。看看它这个空是不是在这个尖角号里头,不过也好写啊,咱们尝咱们尝试写一下啊,就尝试写一下去掉空格啊,这里要智能判断。智能判断是普通文字的空格,哎,还是标签中的空格?哎,标签中的空格不能去掉啊,就比如说比如。哎,你这是div,然后class等于box,那这个空格是不能去。不能去掉class前面的这个空格。对吧,哎,不能去掉这个class前面这个空格啊。是这样子,所以这个地方我觉得还是啊,还是蛮简单的,就便利这个words啊,寻找它是不是啊。
30:03
咱们现在设一个变量,叫做是不是在。咱们这个尖角号里面啊,是不是在尖角号啊。哎,咱们现在先假装它不是啊,不是这叫然后变利,其实这个也挺简单的啊light I。对吧,I等于零啊,咱们要把这个空格去掉,I小于。啊,咱们word的Les。爱佳佳好。哎,这样子的啊,然后如果当前。在。啊,就不在标签里头。啊,并且什么呢?并且你这个words的这一位呢,是一个空格。看见没有,是一个空格。哎,是一个空格,那我就要把这一位去掉,对吧?哎,或者我要把这位给去掉。啊,如果他不在标签里头啊,然后并且它这个这位是个空格。啊,那我这个时候就需要把这个空格给去掉。
31:03
啊,那怎么去掉这个空格呢?那其实还不如再组建一个新的啊,空白字符点咱们拼。哎,空白字符串就是下划线word啊,咱们拼。就一位一位拼啊。好。如果他。呃,在标签不在标签里头啊,并且呢,这个像咱们就录过了对吧,所以就不用拼了。啊,那他如果这一项不是空格。哎,不是空格,那就给他拼上。拼。哎,如果这一项,如果这项不是空格,那么就拼接上,哎,那如果这项是空格。啊I if,它就它就有一个不满足这个平台,就是如果这项是空格,那就必须要满足什么。对,那就是如果这项是空格。那么,只有当。啊,它在标签内的时候。
32:02
对吧,哎,才。啊,拼接上。对吧。哎,那这个时候我才拼接上else。大啊。好,然后再写一个衣服,这样清楚,只有他在标间内的时候。啊不对,它不在标签内啊,对不起,不在这个标签内啊,就是不在这个,因为遇见检点号遇见它就结束掉了,哎,那我就再把它拼上。啊好这样子的,然后再判断,对,如果这一项。哎,是间角号啊,是开始的尖角号,那我就让它这个意思就等于true。对吧,哎,然后L呢,我就让它等于false。
33:01
啊,等于这个闭合的这个符号啊,那我就让它等于false。好了,那这样的话就基本对了,我觉得基本对了啊,然后这里呢,就相当于是输出一个下划线word啊。哎,那这里就应该把这个空格给去了。啊,但是大家可以发现,这并没有去成。对吧,哎,这个空格并没有去成啊看看。如果words,呃,哦,我输出的是words,这块输出words了没有。有点乱啊,把这个给注掉。好,没有word生成了,那这个words空格没没没去掉,你看。看见没有,这个没去掉啊,咱们看看啊。如果它不是空格,那么就给它拼上。对吧,哎,拼上啊,Word词就拼上。然后如果不是破门,它拼上对,否则的话呢。那么就不能在标签内才拼上?啊,不能在标签内置上。不是在标签内。然后遇见这个,它就是标签内遇见这个是大于号。
34:03
可能是这块写错,这个空格判定是不是错了。哎,我们test一下啊,这个杠S啊,因为这个正则可能会。更准一点啊。Word第二项test不是啊,因为test是那个。是正则太子的他。写反了啊。Test一下这个words里的Di压项啊,这个去空格这块,咱们就等于说耽误了一些时间,诶好了,看看空格去的怎么样,哎,这个空格去的就没了。发现了吗?这个东西就没了啊。哎,那这块啊,这块改成这个非啊,再加个叹号啊正则就好一点。但是呢,诶这个空格没加上哦,这写反了,这不该加费,就是如果在标签内的时候才行,咱们刷新看一下。啊,这回打不都对了,你看这是不是没有空格了。对吧,哎,但是这个空格还是没加上,这个空格还是没加上啊。
35:02
这个空格还是没加上,咱们看一下就是如果这一项不是空格啊。那否则。啊,如果它是在里头,那我就把这一项加上。哎,我就把这个空格加上,因为这一项是个空格嘛。对吧,诶这个空格没加上怎么回事,如果他在。如果没通过。啊,就是说如果空格测试没通过,就没不是空格就拼上,那这块就有点问题啊,一上来他万一一上来就在标签里。对吧。哎,然后哦,这个if else不应该写在这儿,应该写在外头。啊,这个开关应该写在外头。然后甚至应该写在上边。啊,然后判断是否在。是否在这个标签里啊。哎,这样子刷新看一下,诶这个空格空出来了,对吧。很不容易啊,你看,为了解决这个空格,我们就花了九牛二虎之力啊。
36:00
哎,这样子的,然后把这个空格拼上。是这样子的。行,那等于说这块呢,我们就存的是下划线这个word对吧,哎,你看我们又把这个升级了,咱们一开始是不是。是吧,哎,这块是很简单的啊,一开始没有这么多,一开始就直接这么写,然后后来加了这么多,就是为了去空格。啊,去空格,其实你看看去掉空格多漂亮。代码也很漂亮,你看。是不是,哎,代码也非常漂亮啊。好了,那咱们这个库就非常的尽善尽美的完成了啊,我们下一节课对它进行一个总结啊,对他一个总结,嗯。
我来说两句