快速删除数组项

如果你不需要任何特定顺序的数组,与 splice() 相比,pop() 的一个小技巧将为你提供巨大的性能提升。

当你使用数组时,该数组中后续元素的索引需要减少 1.如果数组很大并且要删除的对象更接近该数组的开头,则此进程可能会占用大量时间。

如果你不关心数组中元素的顺序,则可以使用从数组末尾开始的项目替换要删除的项目。这样,数组中所有其他项的索引保持不变,并且随着数组长度的增长,进程的性能不会下降。

例:

function slowRemove(list:Array, item:*):void {
    var index:int = list.indexOf(item);
    
    if (index >= 0) list.splice(index, 1);
}

function fastRemove(list:Array, item:*):void {
    var index:int = list.indexOf(item);

    if (index >= 0) {
        if (index === list.length - 1) list.pop();

        else {
            // Replace item to delete with last item.
            list[index] = list.pop();
        }
    }
}