从数组中删除元素而不重新排列它的最佳方法

blo*_*low 6 javascript arrays

我必须删除我的数组的一些元素,但没有重新排列数组.

如果我使用"删除"删除我的元素,"漏洞"会占用内存吗?

var array=["A","B","C"];
delete array[1];  // array -> ["A", undefined, "C"]
Run Code Online (Sandbox Code Playgroud)

我认为删除的元素确实被删除所以它不占用内存空间,是不是真的?

Jos*_*aro 8

试试用,

array.splice(index, 1);
Run Code Online (Sandbox Code Playgroud)

请参阅掌握JavaScript数组.

  • 数组没有使用splice重新排列,索引将被完全删除.你的意思是,你不想从数组中删除索引?如果是这样,只需将该索引处的值设置为null. (3认同)

oll*_*iej 4

完全依赖于实现。在内部,所有 JS 表示最终都会转换为稀疏表示,但稀疏表示往往每个元素使用更多内存,并且访问速度比非稀疏数组更慢。

因此,从密集数组中删除一个值不太可能释放任何内存,但在删除足够多的元素后,实现可能会转换为稀疏表示以节省总体内存。

注意:您删除的索引处的对象或值不会立即删除 - 删除只是从对象中删除属性槽 - 该对象/值只会在 GC 过程中被删除,并且只有在没有其他属性时才会被删除参考。