00:00
Hello,大家好,那这个小节我们来实现一下slice这个函数。这个函数做呢,是来做数组的切片,就是截取数组当中一段元素,返回一个新数组。那么首先呢,我们按照惯例啊,还是一样,先来演示一下数组原型对象当中那个力方法的一个使用。我们首先先来创建一个数组。12345678。现在我们想把这个二到六。这段内容呢,截取形成一个新数组。那么应该怎么去做?我们可以这样子,a.S括弧。啊,然后呢,第一个参数是开始的下标啊,我们是从第二个位置开始啊,那就是下标为E。好,然后加上,然后呢,12345,注意我们要把六这个数字截出来。
01:00
所以在写的时候呢,这个下边应该往后再挪一位。为什么呢?因为就是结束位置的下标呢,这个元素我们是取不到的。所以说你要想把这个六数字六去掉,你的下边就必须要往前再挪一位,而这个数字七它的下边是几呢?是六,所以说我们应该写成一,然后呢到六。好,来看看结果怎么样。打开浏览器。稍细一面瞅一眼,可以看到二到六就已经被我们成功的截出来了。当然了,这个数字不一定非要连在一起,比方说呢,我们再来演示一下啊。一三。579。然后呢,15举个例子。那么现在如果说我们想把这个三到九把它截出来。那么下边的话,这个位置应该是一啊。234注意这个下边是四,但是我们不能写四,因为如果写四的话呢,四下边对应这个九咱们取不到,所以说应该往后挪一位,应该是一到五。
02:06
来看一下。说细一面啊,3579就来了。好,这是当前呢,对于这个数组原型当中sli方法的一个演示,而下边的话我们要封装这个函数,我们希望它是这样来使用的。Slice。然后第一个参数是元数组,然后第二个呢是开始下标,第三个呢是结束的一个下标,然后结束下标对应的元素我们取不到啊,所以说这个结果我们希望它是三到九啊,3579。好,来打印一下结果。最终的测试代码我们就已经写完了,接下来我们开始实现功能function。第一个参数呢,因为应该为数组,第二个呢为开始下标,第三个呢为结束下标。啊,首先的话,我们先来声明一个空数组。
03:03
为什么上面一个空数组呢?因为slice呢,它返回结果是一个空的数组啊,是一个新的数组,所以说我们要先声明一下。然后呢,下来的话呢,我们要想去截取,其实也很简单,那就是便利对象即可。来个for循环,Let I等于零,I小于a.lengths I加加。然后我们开始去遍历。如果。如果什么呢?如果说我们这个当前下标I要是大于等于了begin。大家可以想象一下啊,我们下边呢,这个I呢,是从零一直往上长的,长到这个数组的长度减一。啊,因为它取不到长度啊,这是小于,所以说呢,I呢是在不断变化的往上长,我们希望呢,当下标这个I呢,等于。开始下边的时候。那么这时候我们就开始呢,将这个对应的这个结果值,就是下标对应的一个元素往结果数组里边去加入。
04:05
但光大于还不行,我们还要再加一个条件,条件应该是I呢,得小于N。因为I呢,不是说每个I都满足条件,I呢得小于这个N才算是满足条件的,所以说以当前来看的话,这个比begin为一,然后呢,N为五,I呢大于等于一。啊,这个位置是满足条件的。然后呢,五在哪呢,五在这儿,所以说他在获取结果的时候呢,只获取中间这一段。哎,就是3579,然后呢,满足条件呢,我们就往result里边去压。然后呢,将下标对应的元素加入数组。就这么简单。然后呢,A下边I搞定。啊,然后呢,我们最后呢,直接将result做一个返回就可以了。好,看看效果怎么样,切过来右键刷新。
05:00
没有问题。呃,那么这块做完之后呢,我们为了能够把它的这个功能呢,做的更为就是接近更更为接近原始的那个。Slice方法,我们这儿呢,应该再加一些判断。做什么判断呢,你比如说。若arr数组长度要是为空怎么办?如果说呃,长度为零是不是啊,长度如果为零的话,我们就没有必要再去做后边这些事情了。所以说我们来做个判断啊,如果a.lengths。是等于零。你是个空数组,如果是个空数组的话,我们无论后边数字传什么都没有必要,没有意义,直接给你返回一个空数组就可以了。好,这是第一种情况的一个判断,下面我们再来判断一下begin这个参数,这个参数可以加,也可以呢,不加。如果不加的话呢,我们就让它从零开始,好,我们来判断一下。好,如果说哎,所以咱们可以这样子做啊,Begin应该等于begin。
06:05
啊,如果说你传了,我用你如果你没有传的话,我就来一个,这个默认值为零。好,那下边的话,我们还可以还要再去做一个判断。什么呢?就要判断一下begin这个值啊,它是不是越界了。啊,就是你是不是大于了咱们数组长度,如果说大于了数组长度的话,那么这个截取也是没有意义的,所以说我们这样做来判断一下,如果说。Begin要是大于了a.S。不能大于,应该大于等于。A等于的话,这个是没有意义的,因为我们取不到那个元素,你想象一下啊,246我们总共总共是六个元素,如果你的比例是六的话,你想想能不能取到元素呢,其实是取不到的啊,就越界了,所以说如果说你要是大于了我们这个LS的话呢,我们的截取。啊,就是没有意义的,在这个情况下的话呢,我们就给它返回一个空数组。
07:03
啊,就不去再做其他阶段了啊,直接返回空数组就可以了。好,那begin参数我们就已经判断完了,下边呢,我们再来判断一下谁呢N的这个参数。也是一样子啊啊,如果你的N的参参数呢,你传递了,我就用你的,如果你没有传递,那么这个参数就是我们数组的长度。想象一下,如果说我们这样子来做。啊,我呢,没有传这个五。没有传最后这个数字啊,就是第三个参数,那么这个时候呢,我默认就是把数组长度传进来246。六进来,六进来之后呢,其实就是六取不到,我们就是相当于从一呢一直把它记到最后。啊,是这样的一个。就是这样一个效果,我们可以来看看他行不行。好,然后呢,点开浏览器,然后呢刷新页面,你看三五七九十五啊,这个没有问题。这是对默认值做了一个判断,然后呢,下边我们再来做判断一下啊,判断什么呢?判断这个N是不是小于了star小于这个begin。
08:08
如果说and要是小于的begin的话。也就是说我这个数字。比你前面的数字还要小。那如果说小的话呢,我们这样来做,就是把N呢设置为a.Les。就是如果说你的设置呢小于了一,那我们就把这个小于的数呢,把它变为数组长度。啊,这样来做的话,就是确保它能够把内容截取到。啊,是这样的一个。功能。好了,下边我们来试一下,比如说我这写个零。啊,然后呢,咱们切过来右键刷新一下,可以看到它也是能够把整个。整个的结果接到的。那如果说我这两个都不写呢。大家可以想象一下,如果我两个都不写,第一个参数这块应该是零,第二个参数没写,那应该是AR的0.0S,那就会把整个结果全都给我们解到啊,刷新可以看一下。
09:04
好了,那到这儿的话呢,关于这个数组的切片。啊,这样一个功能我们就已经给大家做完了啊。这两个参数咱们补一下。数字,然后这块也是一个数字。这个小节我们就先到这儿。
我来说两句