一句话总结:
数组为连续且有序的数据结构,
所以若根据下标查找则很快,index[i]一步到位就可实现查询,若遍历查找则很慢(相对而言);
而插入和删除,除了数组末尾的增删很快,其它处则很慢,因为若数组某处要插入或删除一截,当前位置之后的所有元素都会受影响,都必须一个一个地从原来的位置挪动,而数组末尾的增删则不影响其它元素。
常见时间复杂度:
数组常见API(增删改查操作)
增
下面前三种是对原数组产生影响的增添方法,第四种则不会对原数组产生影响
- push() 快,数组末尾操作,时间复杂度O(1)
- unshift() 慢,数组头位置操作,时间复杂度O(n)
- splice() 慢,数组不定位置操作,时间复杂度O(n)
- concat() 快,数组末尾操作,时间复杂度O(1)
push()
语法:array.push(item1, item2, ..., itemX)
push()方法接收任意数量的参数,并将它们添加到数组末尾,返回数组的最新长度
unshift()
语法:array.unshift(item1,item2, ..., itemX)
unshift()在数组开头添加任意多个值,然后返回新的数组长度
splice()
语法:array.splice(index,howmany,item1,.....,itemX)
传入三个参数,分别是开始位置、0(要删除的元素数量)、插入的元素,返回空数组
concat()
语法:array1.concat(array2,array3,...,arrayX)
首先会创建一个当前数组的副本,然后再把它的参数添加到副本末尾,最后返回这个新构建的数组,不会影响原始数组
删
前三种都会影响原数组,最后一项不影响原数组:
- pop() 快,数组末尾操作,时间复杂度O(1)
- shift() 慢,数组头位置操作,时间复杂度O(n)
- splice() 慢,数组不定位置操作,时间复杂度O(n)
- slice() 快,根据数组下标操作且不影响原数组,时间复杂度O(1)
pop()
语法:array.pop()
pop() 方法用于删除数组的最后一项,同时减少数组的 length 值,返回被删除的项
shift()
语法:array.shift()
shift()方法用于删除数组的第一项,同时减少数组的 length 值,返回被删除的项
splice()
语法:array.splice(index,howmany,item1,.....,itemX)
传入两个参数,分别是开始位置,删除元素的数量,返回包含删除元素的数组
slice()
语法:array.slice(start, end)
用于创建一个包含原有数组中一个或多个元素的新数组,不会影响原始数组,返回切出来的数组
改
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)
返回第一个匹配的元素