詳解 ES6 數組去重

一、Set去重

ES6 中提供了全新的數據類型Set,它具有可以存儲任何類型的值,且每個值都是唯一的特性,這意味著它可以實現數組去重。利用Set去重的代碼可以非常簡潔高效:

const arr = [1, 2, 3, 4, 4, 3, 2, 1];
const newArr = Array.from(new Set(arr));
console.log(newArr); // [1, 2, 3, 4]

首先定義一個數組arr,然後使用new Set()將其轉化為Set,最後用Array.from()方法將Set轉化為數組newArr,這樣新數組newArr中的元素就已經去掉了重複的數字。

Set去重有一個非常明顯的優勢,它可以去掉基本數據類型以外的數據類型,例如對象:

const arr = [{a: 1}, {a: 2}, {a: 1}];
const newArr = Array.from(new Set(arr));
console.log(newArr); // [{a: 1}, {a: 2}]

這種方法的缺點是生成了新的數組,浪費一些空間。

二、filter方法去重

filter()方法傳入一個回調函數,該函數返回true時,當前元素才會保留下來,可以利用這個特性去重:

const arr = [1, 2, 3, 4, 4, 3, 2, 1];
const newArr = arr.filter((item, index) => {
    return arr.indexOf(item) === index;
});
console.log(newArr); // [1, 2, 3, 4]

我們用filter()方法來過濾元素,然後利用indexOf()方法判斷該元素是否是第一次出現,如果是就保留下來。這種方法與Set方法相比,代碼量相對較長。

三、Map去重

Map是一種可以存儲任意類型鍵值對的有序集合,我們可以將數組中的元素作為key,值設為1,最後將Map的鍵返回成一個新數組:

const arr = [1, 2, 3, 4, 4, 3, 2, 1];
const map = new Map();
const newArr = [];
arr.forEach((item) => {
    if(!map.has(item)) {
        map.set(item, 1);
        newArr.push(item);
    }
});
console.log(newArr); // [1, 2, 3, 4]

這種方法在去重的同時保留了數組原有的順序。

四、reduce方法去重

reduce()方法對數組中的每一個元素執行一個指定的操作,並把結果匯總為單個返回值。我們可以在reduce方法中判斷當前元素是否在此前已經出現過,如果出現過就跳過,否則將其加入新數組中:

const arr = [1, 2, 3, 4, 4, 3, 2, 1];
const newArr = arr.reduce((prev, cur) => {
    if(!prev.includes(cur)) {
        prev.push(cur);
    }
    return prev;
}, []);
console.log(newArr); // [1, 2, 3, 4]

reduce方法的第二個參數可以指定初始值,上面代碼中我們將其設為一個空數組。相比於filter方法,這種方法在效率上稍微遜色一些。

五、雙重for循環去重

最簡單的去重方法是遍曆數組,使用雙重for循環依次判斷數組中的每一個元素是否重複:

const arr = [1, 2, 3, 4, 4, 3, 2, 1];
const newArr = [];
for(let i = 0; i < arr.length; i++) {
    let flag = true;
    for(let j = 0; j < i; j++) {
        if(arr[j] === arr[i]) {
            flag = false;
            break;
        }
    }
    if(flag) {
        newArr.push(arr[i]);
    }
}
console.log(newArr); // [1, 2, 3, 4]

這種方法最為原始,缺點就是時間複雜度較高,不適用於大規模數據的去重。

六、使用lodash

使用第三方庫lodash可以大大簡化數組去重的操作:

const _ = require('lodash');
const arr = [1, 2, 3, 4, 4, 3, 2, 1];
const newArr = _.uniq(arr);
console.log(newArr); // [1, 2, 3, 4]

在使用lodash時我們需要先安裝,可以使用npm install lodash命令進行安裝。

七、小結

本文詳細介紹了6種ES6數組去重的方法,包括Set去重、filter方法去重、Map去重、reduce方法去重、雙重for循環去重以及使用第三方庫lodash。不同的方法有不同的優缺點,我們可以根據場景和需求選擇最適合的方法。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/238342.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:10
下一篇 2024-12-12 12:10

相關推薦

  • Python導入數組

    本文將為您詳細闡述Python導入數組的方法、優勢、適用場景等方面,並附上代碼示例。 一、numpy庫的使用 numpy是Python中一個強大的數學庫,其中提供了非常豐富的數學函…

    編程 2025-04-29
  • Python返回數組:一次性搞定多種數據類型

    Python是一種多用途的高級編程語言,具有高效性和易讀性的特點,因此被廣泛應用於數據科學、機器學習、Web開發、遊戲開發等各個領域。其中,Python返回數組也是一項非常強大的功…

    編程 2025-04-29
  • Python去掉數組的中括弧

    在Python中,被中括弧包裹的數據結構是列表,列表是Python中非常常見的數據類型之一。但是,有些時候我們需要將列表展開成一維的數組,並且去掉中括弧。本文將為大家詳細介紹如何用…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • Python二維數組對齊輸出

    本文將從多個方面詳細闡述Python二維數組對齊輸出的方法與技巧。 一、格式化輸出 Python中提供了格式化輸出的方法,可以對輸出的字元串進行格式化處理。 names = [‘A…

    編程 2025-04-29
  • Java創建一個有10萬個元素的數組

    本文將從以下方面對Java創建一個有10萬個元素的數組進行詳細闡述: 一、基本介紹 Java是一種面向對象的編程語言,其強大的數組功能可以支持創建大規模的多維數組以及各種複雜的數據…

    編程 2025-04-28
  • Python數組隨機分組用法介紹

    Python數組隨機分組是一個在數據分析與處理中常用的技術,它可以將一個大的數據集分成若干組,以便於進行處理和分析。本文將從多個方面對Python數組隨機分組進行詳細的闡述,包括使…

    編程 2025-04-28
  • Python數組索引位置用法介紹

    Python是一門多用途的編程語言,它有著非常強大的數據處理能力。數組是其中一個非常重要的數據類型之一。Python支持多種方式來操作數組的索引位置,我們可以從以下幾個方面對Pyt…

    編程 2025-04-28
  • Python語言數組從大到小排序符號的用法介紹

    當我們使用Python進行編程的時候,經常需要對數組進行排序從而使數組更加有序,而數組的排序方式有很多,其中從大到小排序符號是一種常見的排序方式。本文將從多個方面對Python語言…

    編程 2025-04-28
  • Python列錶轉numpy數組

    本文將闡述Python中列表如何轉換成numpy數組。在科學計算和數據分析領域中,numpy數組扮演著重要的角色。Python與numpy的無縫結合使得數據操作更加方便和高效。因此…

    編程 2025-04-27

發表回復

登錄後才能評論