[英]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.