当前位置:   article > 正文

js数组常见API的时间复杂度小结_js indexof时间复杂度

js indexof时间复杂度

一句话总结:

数组为连续且有序的数据结构,

所以若根据下标查找则很快,index[i]一步到位就可实现查询,若遍历查找则很慢(相对而言)

而插入和删除,除了数组末尾的增删很快,其它处则很慢,因为若数组某处要插入或删除一截,当前位置之后的所有元素都会受影响,都必须一个一个地从原来的位置挪动,而数组末尾的增删则不影响其它元素。

常见时间复杂度:

数组常见API(增删改查操作)

下面前三种是对原数组产生影响的增添方法,第四种则不会对原数组产生影响

  • push()  快,数组末尾操作,时间复杂度O(1)
  • unshift()   慢,数组头位置操作,时间复杂度O(n)
  • splice()  慢,数组不定位置操作,时间复杂度O(n)
  • concat()  慢,数组末尾操作,但需要逐个加入数据,时间复杂度O(n)

push()

语法:array.push(item1item2, ..., itemX)

push()方法接收任意数量的参数,并将它们添加到数组末尾,返回数组的最新长度

unshift()

语法:array.unshift(item1,item2, ..., itemX)

unshift()在数组开头添加任意多个值,然后返回新的数组长度

splice()

语法:array.splice(index,howmany,item1,.....,itemX)

传入三个参数,分别是开始位置、0(要删除的元素数量)、插入的元素,返回空数组

concat()

语法:array1.concat(array2,array3,...,arrayX)

首先会创建一个当前数组的副本,然后再把它的参数中的元素逐个添加到副本末尾,所以时间复杂度为O(n),最后返回这个新构建的数组,不会影响原始数组。当 concat() 方法只有一个参数且参数为一个空数组时,它的时间复杂度为 O(1),因为它只需要返回一个新的空数组,在其他情况下,它的时间复杂度都为 O(n)。

前三种都会影响原数组,最后一项不影响原数组:

  • pop()    快,数组末尾操作,时间复杂度O(1)
  • shift()   慢,数组头位置操作,时间复杂度O(n)
  • splice()   慢,数组不定位置操作,时间复杂度O(n)
  • slice()   慢,根据数组下标操作且不影响原数组,但要遍历切片,时间复杂度O(n)

pop()

语法:array.pop()

pop() 方法用于删除数组的最后一项,同时减少数组的 length 值,返回被删除的项

shift()

语法:array.shift()

shift()方法用于删除数组的第一项,同时减少数组的 length 值,返回被删除的项

splice() 

语法:array.splice(index,howmany,item1,.....,itemX)

传入两个参数,分别是开始位置,删除元素的数量,返回包含删除元素的数组

slice() 

语法:array.slice(startend)

用于创建一个包含原有数组中一个或多个元素的新数组,不会影响原始数组返回切出来的数组。在实现上,slice() 方法使用指定的起始索引和结束索引从原数组中提取部分元素,然后将这些元素组成一个新数组并返回。在计算切片后新数组的长度时,对于起始索引和结束索引之间的元素,都需要进行一次遍历,这部分操作的时间复杂度为 O(k),其中 k 是切片后新数组的长度。因此,slice() 方法的时间复杂度为 O(n)。

splice()  慢,数组不定位置操作,时间复杂度O(n)

语法:array.splice(index,howmany,item1,.....,itemX)

传入三个参数,分别是开始位置,要删除元素的数量,要插入的任意多个元素,返回删除元素的数组,对原数组产生影响

(index[i]根据下标查找很快)

  • indexOf()   慢,通过遍历数组查找,时间复杂度O(n)
  • includes()    慢,通过遍历数组查找,时间复杂度O(n)
  • find()    慢,通过遍历数组查找,时间复杂度O(n)

indexOf()

语法:array.indexOf(item,start)

返回要查找的元素在数组中的位置,如果没找到则返回-1

includes()

语法:array.includes(item,start)

返回要查找的元素是否在数组中,找到返回true,否则false

find()

语法:array.find(function(currentValue, index, arr),thisValue)

返回第一个匹配的元素

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/900617
推荐阅读
相关标签
  

闽ICP备14008679号