如果您不需要保留数组的顺序,使用.pop() 比.splice() 快得多。
.splice() 将删除给定索引处的元素。然后发生的情况是,数组中的每个其他元素都需要将其在数组中的位置减少 1。如果您的数组很大并且删除元素的索引很小,这可能会很慢。
使用.pop(),您可以完全删除重新索引所有内容的过程。您可以使用.pop() 从数组中删除最后一项,而不是删除给定索引处的元素。从这里,您需要做的就是将您要删除的项目替换为您使用.pop() 获得的项目。如前所述,这当然意味着元素的顺序不会得到维护。
代码示例:
.splice():
var list:Array = [0,1,2,3,4,5];
list.splice(2, 1);
trace(list); // 0,1,3,4,5
然后.pop():
var last:* = list.pop();
list[2] = last;
trace(list); // 0,1,5,4 - Notice we move 5 to the index 2 and lose the order.
这里有最重要的实际性能测试:
var list:Array = [];
function fillList():void
{
for(var i = 0; i < 200000; i++) list.push(i);
}
function emptyViaSplice():void
{
fillList();
var t:Number = getTimer();
while(list.length > 0)
{
list.splice(0, 1);
}
trace("emptyViaSplice: " + (getTimer() - t));
}
function emptyViaPop():void
{
fillList();
var t:Number = getTimer();
while(list.length > 0)
{
if(list.length == 1) list.pop();
else
{
var l:* = list.pop();
list[0] = l;
}
}
trace("emptyViaPop: " + (getTimer() - t));
}
结果:
emptyViaSplice(); // 12153 ms
emptyViaPop(); // 37 ms