Javascript 删除js中的数组元素?

Javascript 删除js中的数组元素?,javascript,arrays,hashtable,Javascript,Arrays,Hashtable,js中的数组是对象,但删除数组元素会启用BigO,而删除obj元素会启用BigO O1?为什么? 请让我知道我哪里做错了 谢谢 删除obj元素具有BigO O1 这是因为JS中的对象的行为类似于 删除数组元素时会启用BigO 这是因为数组是一个特殊的对象,它将其元素一个接一个地保存在内存块上,元素之间没有空闲空间。删除索引为i的元素后,应移动索引大于i+1的所有元素以填充释放的空间。这不是一个明显的问题。在对象中,这更清楚,因为delete操作符具有恒定的复杂时间,因为您正在删除特定的属性或方法

js中的数组是对象,但删除数组元素会启用BigO,而删除obj元素会启用BigO O1?为什么?

请让我知道我哪里做错了

谢谢

删除obj元素具有BigO O1

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

删除数组元素时会启用BigO


这是因为数组是一个特殊的对象,它将其元素一个接一个地保存在内存块上,元素之间没有空闲空间。删除索引为i的元素后,应移动索引大于i+1的所有元素以填充释放的空间。

这不是一个明显的问题。在对象中,这更清楚,因为delete操作符具有恒定的复杂时间,因为您正在删除特定的属性或方法,并且不在对象上迭代。 Array是一个具有有序索引的对象,我们使用for deletation方法迭代数组并删除项,如Array.prototype.splice:

上面我们有线性复杂时间BigOn,但我们可以实现从数组中删除项的恒定时间:

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]

如果您需要对后续元素重新编号,它会打开。如果你不这样做,那就是O1,你可以留下一个洞。也许这能解释为什么?检查此链接是否已清除。
let arr = [1,6,10,99,44]; //If you want delete last item

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