簡體   English   中英

從數組中刪除所有出現的值的最快方法是拼接它最快還是過濾更快?

[英]Whats the fastest way to remove all occurrences of a value from an array is splicing it the fastest or is filter faster?

就像:

array.filter(i => i !== item) 

這會比類似的更快嗎

var i = array.length;

    while (i--) {
        if (array[i] === item) {
            array.splice(array.indexOf(item), 1);
        }
    }

看性能的時候。 我想刪除數組中同一事物的多個實例

從算法上講, filter應該獲勝; 它執行單個讀取和寫入傳遞,按順序構建單個新Array O(n) 無論如何, splice都必須進行相同數量的讀取,並且寫入工作將匹配只是為了在數組的開頭拼接出單個匹配值,如果它占用數組的前兩個元素,則幾乎是兩倍,等等. 考慮到元素的更多實例減少了后續拼接的工作,它在實踐中可能不是很O(n²) ,但它很接近(你會看到有效的O(n²)行為對於n匹配元素的數組,然后是n非-匹配的元素必須被n拼接復制n次)。

至於在實踐中哪個更快,您必須進行測試,但是對於大型 arrays,我肯定會默認使用filter splice應該只在 memory 非常珍貴的極少數情況下獲勝,避免復制可能會有所作為(非常不尋常)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM