首頁 >web前端 >js教程 >如何從 JavaScript 陣列中刪除重複值?

如何從 JavaScript 陣列中刪除重複值?

Linda Hamilton
Linda Hamilton原創
2024-12-19 19:03:101005瀏覽

How to Remove Duplicate Values from a JavaScript Array?

從 JS 陣列中刪除重複值

使用 JavaScript 陣列時,通常需要刪除重複值。可以採用多種方法來實現此目的,而無需更改原始數組。

使用Set 建構子和擴充語法

最直接的方法是使用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];
    });
}

自訂獨特Criteria

要依照特定條件過濾重複項,可以使用回調函數:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn