當處理巨大的數組時,並且想要從數組中過濾元素,就性能而言,創建一個新數組並將其推入新數組中,或者手動刪除元素從現有的陣列使用類似這樣的Deleting array elements in JavaScript - delete vs splice從JavaScript中的數組中刪除元素的最佳方法?
有誰知道嗎?
謝謝
當處理巨大的數組時,並且想要從數組中過濾元素,就性能而言,創建一個新數組並將其推入新數組中,或者手動刪除元素從現有的陣列使用類似這樣的Deleting array elements in JavaScript - delete vs splice從JavaScript中的數組中刪除元素的最佳方法?
有誰知道嗎?
謝謝
創建一個新的數組並推動消耗更多的時間和內存。但刪除不會花費太多時間和可用內存。
如果您創建一個新數組並進行推送,它必須比較每個元素,然後再進行推送。
如果刪除,則只能進行比較和刪除。
第二個選項對性能有好處
您可以使用splice()從數組中刪除一個項目。 考慮下面的例子,如果你想刪除的項指數爲2,您可以使用拼接(位置,範圍)
var a = [1,2,3,4,5,6,7];
a.splice(2,1);
console.log(a);
這將輸出
[1, 2, 4, 5, 6, 7]
問題不在於如何使用'.splice()',而是詢問'.splice()'是否是性能的最佳選擇,相比之下,創建一個填充了項目的新陣列將被保留。 – nnnnnn
答案的應該能夠通過使用不同的陣列方法或其他方法運行測試而無需猜測而確定地確定。
var arr = Array(7);
var r = 3;
console.time(".splice()");
arr.splice(r, 1); // try different methods here
console.timeEnd(".splice()");
var arr = Array(7);
console.time(".filter()");
arr = arr.filter(function(_, i) { // try different methods here
return i !== r
});
console.timeEnd(".filter()");
var arr = Array(1000);
var r = 500;
console.time(".splice()");
arr.splice(r, 1);
console.timeEnd(".splice()");
var arr = Array(1000);
console.time(".filter()");
arr = arr.filter(function(_, i) {
return i !== r
});
console.timeEnd(".filter()");
var arr = Array(100000);
var r = 50000;
console.time(".splice()");
arr.splice(r, 1);
console.timeEnd(".splice()");
var arr = Array(100000);
console.time(".filter()");
arr = arr.filter(function(_, i) {
return i !== r
});
console.timeEnd(".filter()");
@omega在瀏覽器'console'中,'.splice()'在比'.filter()'更少的時間內返回結果。不知道'delete'是如何相關的,除非期望的結果是'undefined'被替換爲設置了前一個值的數組中的索引處的值?還有哪些其他方法應該比較?請注意,'.splice()'返回的結果也比'.slice()'少。 – guest271314
您可以使用拼接的方法來修改ŧ他陣列的內容。如果你想添加元素的使用 - 如果你想刪除一個元素使用
arrayName.splice(index,range,element);
- 如果刪除中間元素
arrayName.splice(index,deleteCount);
問題不在於如何使用'.splice()',而是明確地詢問它是否比通過其他方法創建新數組更好。 – nnnnnn
,它沒有推動所有其他元素1點背後? – omega
是的。但換句話說,它必須執行n次推送。在這種情況下,只需要n/2次按壓。如果要移除的元素是第一個元素,則可以使用任何方法。否則,第二種方法是好的 –
你的意思是「刪除」,如在問題中提到的'delete'關鍵字或'.splice()'(在問題中也提到)?因爲'delete'有一些明顯的缺點,從它不改變數組的'.length'這個事實開始...... – nnnnnn