在 JavaScript 陣列中尋找唯一值
在 JavaScript 中處理陣列時,通常需要刪除重複值以確保唯一性。這是 JavaScript 陣列遇到的常見問題:
var numbers = [1, 2, 3, 4, 5, 1, 2]; numbers.getUnique(); // [1, 2, 3, 4, 5] (incorrectly includes 1 and 2)
提供的原型方法 Array.prototype.getUnique 嘗試過濾掉重複項,但在遇到零值時失敗。
To了解問題後,讓我們檢查一下程式碼:
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; };
問題出在用來追蹤唯一值的物件 o 上。當數字插入 o 時,它會轉換為字串。但是,對於零,此轉換會產生空字串 ''。
因此,當第二個循環迭代 o 時,它會遇到空字串作為鍵並將其添加到 a 數組中。這會導致錯誤地包含重複值。
唯一值的正確解
要準確地從陣列中取得唯一值,請考慮使用下列ES6 解過濾方法:
function onlyUnique(value, index, array) { return array.indexOf(value) === index; } // usage example: var numbers = [1, 2, 3, 4, 5, 1, 2]; var unique = numbers.filter(onlyUnique); console.log(unique); // [1, 2, 3, 4, 5]
此函數將陣列中每個值的索引與目前索引進行比較。如果索引匹配,則表示該值是唯一的並且包含在過濾後的陣列中。透過這種方法,所有重複值都被有效刪除。
以上是如何有效率地尋找並傳回 JavaScript 陣列中的唯一值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!