使用原型識別 JavaScript 陣列中的重複項
在 JavaScript 中,通常需要從陣列中刪除重複值。一種流行的方法是使用自訂「getUnique」函數擴充數組原型,如下所示:
Array.prototype.getUnique = function() { var o = {}, a = [], i, e; for (i = 0; e = this[i]; i++) {o[e] = 1}; for (e in o) {a.push (e)}; return a; }
但是,當陣列包含零值時,此腳本會遇到問題。要理解原因,讓我們詳細檢查一下問題。
「getUnique」函數利用物件「o」作為值的暫存。這對於可以用作物件鍵的值非常有效,例如字串或除零之外的數字。但是,JavaScript 將數字零 ('0') 視為虛假值,這表示 'o[0]' 的計算結果為 'false'。
迭代物件鍵時,會跳過虛假值,從而導致從生成的唯一數組中省略零。此行為與預期操作不同,預期操作將零視為有效的唯一值。
帶過濾器的本機解決方案
在現代 JavaScript 環境(ES5及更高版本)中,使用「filter」方法可以提供更簡潔、更有效率的方法:
function onlyUnique(value, index, array) { return array.indexOf(value) === index; } // usage example: var a = ['a', 1, 'a', 2, '1']; var unique = a.filter(onlyUnique); console.log(unique); // ['a', 1, 2, '1']
「filter」方法採用回調函數,對於要包含在新數組中的每個唯一元素傳回“true”。在這種情況下,我們的回調檢查數組中當前元素的索引是否與其在回調中的位置匹配,從而確認其唯一性。這種方法不依賴物件鍵並正確處理零值。
以上是如何有效地從 JavaScript 陣列中刪除重複值(包括零)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!