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

时间:2009-10-28 19:01:41

标签: javascript arrays

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

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

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

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

4 个答案:

答案 0 :(得分:8)

尝试使用,

array.splice(index, 1);

请参阅Mastering JavaScript Arrays

答案 1 :(得分:4)

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

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

注意:您删除的索引中的对象或值不会立即删除 - 删除只是从对象中删除属性槽 - 对象/值只会在GC传递期间被删除,并且只有在那里没有其他参考。

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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

var arr = ["A", "B", "C"];
const idx = 1;

//Before
console.log(arr);

arr = arr.slice(0, idx).concat(arr.slice(idx + 1));

//After
console.log(arr);