我必须删除我的数组的一些元素,但没有重新排列数组。
如果我使用“删除”删除我的元素,“漏洞”会占用内存吗?
var array=["A","B","C"];
delete array[1]; // array -> ["A", undefined, "C"]
我认为删除的元素确实被删除所以它不占用内存空间,是不是真的?
答案 0 :(得分:8)
答案 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);