在js中删除数组元素?

时间:2019-02-07 06:50:11

标签: javascript arrays hashtable

由于js中的数组是对象,但删除数组元素具有BigO O(n),而删除obj元素具有BigO O(1)吗?为什么?

请让我知道我在哪里做错了!

谢谢

2 个答案:

答案 0 :(得分:0)

  

删除obj元素具有BigO O(1)

这是因为JS中的对象的行为类似于hashmap

  

删除数组元素具有BigO O(n)

这是因为array是一个特殊的对象,它将其元素一个接一个地保持在一块内存中,而元素之间没有可用空间。删除具有i索引的元素后,应移动所有索引比i+1更高的元素以填充释放的空间。

答案 1 :(得分:0)

这不是一个显而易见的问题。在对象中,这更加清楚,因为delete运算符具有恒定的复杂时间,因为您要删除特定的属性或方法并且不要在对象上进行迭代。 数组是一个有序索引的对象,我们使用的是删除方法,该方法遍历数组并删除诸如Array.prototype.splice()之类的项目:

let arr = [1,6,10,99,44]; //If you want delete 10 you have to iterate by 1,6 and 10

arr.splice(2,1); //arr = [1,6,99,44]

并且在上面,我们具有复杂度的线性时间(BigO(n)),但是我们可以为数组中的删除项获得恒定的时间:

let arr = [1,6,10,99,44]; //If you want delete last item

arr.length = 4 //arr = [1,6,10,66]

最后一个提示,切勿对数组使用delete运算符,例如delete arr[2],因为数组的长度不会改变,并且您会得到数组[1,6, empty,99,44]