学习js数据结构与算法-数组(7)

88 阅读3分钟

「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战」。

个人觉得要想进大厂,就必须学习了解算法和数据结构,经历了多次面试之后,也知道了算法和数据结构的重要性,所以,我也打算从今天开始,进入学习,下载了一下电子书,边看书,边跟着书的例子来敲一下代码,下面就开始总结一下对算法和数据结构的学习吧。

第八天:继续了解数组

  • fill

    用静态值填充数组,参数的个数不同,会有不同的表现,但是用这个方法的时候就得注意了,这个方法会改变原来的数组

    const arr = [1,2,3,4,5]
    arr.fill(0)
    

    经过上面的操作之后,arr会变成这样:[0,0,0,0,0],原来的数组都被修改了

    arr.fill(0,2)
    

    如果是两个参数,那么第二个参数就是从数组索引(包括当前索引)为己开始,所以上面的结果是:[1,2,0,0,0]

    arr.fill(0,1,3)
    

    如果是三个参数,那么第三个参数就是结束索引,上面的操作意思是从索引1开始,到索引3结束(包括1,不包括3),所以上面的结果是[1,0,0,4,5]

  • copyWithin

    复制数组中一系列元素到同一数组指定的起始位置,注意,这里是复制到同一数组,不像之前的是复制一个新的数组出来

    arr.copyWithin(0,2)
    

    第一个参数是从该位置开始替换数据,第二个参数是从该位置开始读取要复制的数据,所以上面的输出结果是:[3,4,5,4,5],因为上面并没有并没有输入第三个参数,所以相当于从数组索引2到数组结束为止

    arr.copyWithin(0,2,3)
    

    上面传了最后一个参数,意思是从零开始替换,替换的数据从2到3(不包括3),所以最后的结果是:[3,2,3,4,5],因为只复制了一个。

  • includes

    如果数组中存在某个元素则返回 true,否则返回 false。

    arr.includes(1)
    arr.includes(6)
    

    可以看上,上面的第一个输出是true,第二个输出是false,没有这个方法之前都是用的indexOf去判断的,但indexOf不够语义化,NaN也判断不了。

    arr.includes(1,1)
    

    当一个参数的时候,第二个参数默认是零,也就是从零开始找,现在给了第二个参数,从索引1开始找1,那就找不到了,所以输出的结果是false。

  • find

    用于找出第一个符合条件的数组成员

    arr.find(item => item > 3)
    arr.find(item => item > 6)
    

    可以看到,上面的第一个输出了4,第二个输出了undefined。它的参数和forEach这些函数一样,第一个回调函数也有三个参数,都一样,第一个是元素的值,第二个是元素的索引,第三个是当前数组。第二个参数指定this

  • findIndex

    返回第一个符合条件的数组成员的位置

    arr.find(item => item > 3)
    arr.find(item => item > 6)
    

    可以看到,第一个返回了3,也就是元素4所在的索引。第二个返回了-1,都不符合就返回-1

  • flat

    扁平化数组

    [1, 2, [3, 4], 5].flat()
    

    可以看到,上面是一个二维数组,通过上面的操作,可以直接变为一维数组,所以上面的结果是[1,2,3,4,5],如果不传参数,那么他默认只是打开一层数组,可以传任意你像打开的层数。

    [1, 2, [3, [4, 5]]].flat()
    [1, 2, [3, [4, 5]]].flat(2)
    

    可以看到,第一个结果是[1, 2, 3, [4, 5]],第二个结果是[1, 2, 3, 4, 5]。

    还有一个关键字可以作为参数Infinity

    [1, [2, [3]],4,5].flat(Infinity)
    

    输出的结果是[1, 2, 3, 4, 5],这个参数是无论多少层,都会解开