JavaScript >> Javascript 文檔 >  >> JavaScript

如何使用 JavaScript 在數組中查找重複項

有多種方法可用於檢查數組是否包含 JavaScript 中的重複值。您可以使用 indexOf() 方法,Set 對象,或迭代來識別數組中的重複項。

Set 對象

Set 是 ES6 中引入的一種特殊數據結構,用於存儲唯一值的集合。由於 Set 中的每個值 必須是唯一的,傳遞的任何重複項將被自動刪除:

const numbers = [1, 2, 3, 2, 4, 5, 5, 6];

const unique = Array.from(new Set(numbers));

console.log(unique);
// [ 1, 2, 3, 4, 5, 6 ]

我們上面使用的 Array.from() 方法將 Set 回到一個數組。這是必需的,因為 Set 不是數組。如果你想進行轉換,你也可以使用擴展運算符:

const unique = [...new Set(numbers)];

檢查是否有重複項 在原始數組中,只需比較兩個數組的長度即可:

const numbers = [1, 2, 3, 2, 4, 5, 5, 6];

const unique = Array.from(new Set(numbers));

if(numbers.length === unique.length) {
    console.log(`Array doesn't contain duplicates.`);
} else {
    console.log(`Array contains duplicates.`);
}
// Output: Array contains duplicates.

準確找出哪些元素是重複的 ,您可以使用 unique 上面的數組,並從原始數組中刪除每個項目,如下所示:

const numbers = [1, 2, 3, 2, 4, 5, 5, 6];

const set = new Set(numbers);

const duplicates = numbers.filter(item => {
    if (set.has(item)) {
        set.delete(item);
    } else {
        return item;
    }
});

console.log(duplicates);
// [ 2, 5 ]

indexOf() 方法

在此方法中,我們將元素第一次出現的索引與數組中的所有元素進行比較。如果它們不匹配,則意味著該元素是重複的:

const numbers = [1, 2, 3, 2, 4, 5, 5, 6];

const duplicates = numbers.filter((item, index) => index !== numbers.indexOf(item));

console.log(duplicates);
// [ 2, 5 ]

只要您只想檢查數組是否包含重複項,上述解決方案就可以完美運行。但是,如果這些項在數組中出現兩次以上,則輸出數組可能包含重複項:

const numbers = [1, 2, 3, 2, 2, 4, 5, 5, 6];

const duplicates = numbers.filter((item, index) => index !== numbers.indexOf(item));

console.log(duplicates);
// [ 2, 2, 5 ]

some() 方法

在 JavaScript 中,some() 方法返回 true 如果一個或多個元素通過某個條件。

就像 filter() 方法,some() 方法遍歷數組中的所有元素以評估給定條件。

在回調函數中,我們再次使用 indexOf() 方法將當前元素索引與數組中的其他元素進行比較。如果兩個索引相同,則表示當前項不重複:

const numbers = [1, 2, 3, 2, 4, 5, 5, 6];

const isDuplicate = numbers.some((item, index) => index !== numbers.indexOf(item));

if (!isDuplicate) {
    console.log(`Array doesn't contain duplicates.`);
} else {
    console.log(`Array contains duplicates.`);
}
// Output: Array contains duplicates.

for 循環

最後,在數組中查找重複項的最後一種方法是使用 for 循環。

下面是一個使用嵌套 for 循環將數組的每個元素與數組的所有其他元素進行比較以檢查兩個值是否相同的示例:

const numbers = [1, 2, 3, 2, 4, 5, 5, 6];

let isDuplicate = false;

// Outer for loop
for (let i = 0; i < numbers.length; i++) {
    // Inner for loop
    for (let j = 0; j < numbers.length; j++) {
        // Skip self comparison
        if (i !== j) {
            // Check for duplicate
            if (numbers[i] === numbers[j]) {
                isDuplicate = true;
                // Terminate inner loop
                break;
            }
        }
        // Terminate outer loop
        if (isDuplicate) {
            break;
        }
    }
}

if (!isDuplicate) {
    console.log(`Array doesn't contain duplicates.`);
} else {
    console.log(`Array contains duplicates.`);
}
// Output: Array contains duplicates.

Tutorial JavaScript 教程
  1. jQuery Tables:用於創建和管理表格的插件

  2. 將組件引入遺留代碼

  3. 開始使用開源的 3 個步驟

  4. 在 React 中跨項目拆分功能?

  5. 在 React 中創建一個聊天應用程序

  6. OceanWP:易於定制且速度極快的 WordPress 主題

  7. 構建一個簡單的 CLI 工具來簡化您的日常任務

  1. Angular 中的可選內容投影/注入

  2. 正則表達式精確匹配 5 位數字

  3. 探索 Backbone.js - 第 2 部分

  4. Startup Clix:ESLint &Winning with Pusher Application State

  5. Web 性能自動化 - All Flavors Lighthouse

  6. Imba - 另一種網絡反應式技術

  7. 管理面板的前 7 個以上 Node.js React 模板和主題

  1. 故事驅動設計

  2. Angular:如何創建訂閱自定義警報服務

  3. 使用 Redux 庫在 ReactJS 中進行狀態管理

  4. Docker 化 Node.js 時開始殺死它的 8 個 Protips