在Javascript中,如果我有一个非常大的数组,myArray
我通过调用myArray.push()
我使用delete myArray[102]
是否有一些好处或理由来创建一个单独的数组,如myArrayGaps
,它保存myArray
中的哪些索引没有被使用,这样如果有未使用的索引,我会通过定义一个来添加到数组中像myArray[102] = newValue;
这样的特定索引,而不是调用.push()
并累积未使用的索引?
或者由于Javascript内存处理的某些方面,这是不切实际和毫无意义的吗?
我删除而不是拼接的原因是因为我不想重新排序数组的索引;我正在使用它们来识别特定索引处的特定对象。我主要是询问是否有任何理由来优化我使用delete
时所产生的差距。
答案 0 :(得分:1)
使用delete array[index]
删除数组中的属性会留下一个漏洞。
相反,您可以使用splice
属性来删除该索引中的值并调整数组大小。
正如您所说,
var a = [1,2,3,4];
delete a[2];
如果您现在打印a
,它将包含[1, 2, undefined × 1, 4]
。 delete
删除了元素,但没有重新索引数组/长度。
但如果你改用splice,
a.splice(2,1);
它会返回[1, 2, 4]
。所以你不会找到任何漏洞。