使用 JavaScript 陣列時,通常需要刪除重複值。可以採用多種方法來實現此目的,而無需更改原始數組。
最直接的方法是使用Set建構函式和展開語法:
const uniq = [...new Set(array)];
這會從陣列建立一個新的Set,它會自動刪除重複項。然後,擴展語法將 Set 轉換回數組。
另一個選項是根據indexOf 方法過濾數組:
const uniqueArray = a.filter(function(item, pos) { return a.indexOf(item) == pos; });
此方法迭代數組並檢查每個元素的第一次出現是否與其位置相符。只有唯一元素才會滿足此條件。
為了提高效率,可以使用使用物件進行雜湊處理:
function uniq(a) { const seen = {}; return a.filter(function(item) { return seen.hasOwnProperty(item) ? false : (seen[item] = true); }); }
這種方法維護一個哈希表來快速檢查重複值,確保線性時間
如果輸入數組已排序,則可以透過排序然後過濾掉連續的相等元素來刪除重複項:
function uniq(a) { return a.sort().filter(function(item, pos, ary) { return !pos || item != ary[pos - 1]; }); }
要依照特定條件過濾重複項,可以使用回調函數:
function uniqBy(a, key) { const seen = {}; return a.filter(function(item) { const k = key(item); return seen.hasOwnProperty(k) ? false : (seen[k] = true); }); }
關鍵回調允許自訂定義比較,並能夠根據更複雜的情況刪除重複項邏輯。
在某些情況下,可能需要保留重複元素的第一次或最後一次出現:
function uniqByKeepFirst(a, key) { const seen = new Set(); return a.filter(item => { const k = key(item); return seen.has(k) ? false : seen.add(k); }); } function uniqByKeepLast(a, key) { return [ ...new Map( a.map(x => [key(x), x]) ).values() ] }
uniqByKeepFirst 函數利用Set 來維護唯一鍵,而uniqByKeepLast 使用Map來保留與每個鍵關聯的最後遇到的值。
以上是如何從 JavaScript 陣列中刪除重複值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!