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

Javascript 从数组中删除元素而不重新排列的最佳方法,javascript,arrays,Javascript,Arrays,我必须删除数组中的一些元素,但不能重新排列数组 如果我使用“删除”来删除元素,“孔”会占用内存吗 var array=["A","B","C"]; delete array[1]; // array -> ["A", undefined, "C"] 我认为被删除的元素确实被删除了,所以它不会占用内存空间,不是吗?您可以使用array.splice(1,1)它将删除索引1处的一个条目。第一个参数是索引,第二个参数是计数。完全依赖于实现。在内部,所有JS表示最终都将转换为稀疏表示,但spa

我必须删除数组中的一些元素,但不能重新排列数组

如果我使用“删除”来删除元素,“孔”会占用内存吗

var array=["A","B","C"];
delete array[1];  // array -> ["A", undefined, "C"]

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

您可以使用
array.splice(1,1)它将删除索引1处的一个条目。第一个参数是索引,第二个参数是计数。

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

由于这个原因,从密集数组中删除onevalue不太可能释放任何内存,但在删除足够多的元素集后,实现可能会转换为稀疏表示以节省整个内存

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

尝试使用

array.splice(index, 1);

请参阅。

有很多方法可以做到这一点。其中之一是创建不包含索引的数组切片,然后连接切片

var arr=[“A”、“B”、“C”];
常数idx=1;
//以前
控制台日志(arr);
arr=arr.slice(0,idx).concat(arr.slice(idx+1));
//之后

控制台日志(arr)不重新排列它,所以拼接不是我要找的。不重新排列它,所以拼接不是我要找的。数组不使用拼接重新排列,索引将完全删除。您的意思是,您不想从数组中删除索引吗?如果是这样,只需将该索引处的值设置为null。