快速刪除陣列項

如果你不需要任何特定順序的陣列,與 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();
        }
    }
}