精品秘无码一区二区三区老师-精品秘一区二三区免费雷安-精品蜜桃秘一区二区三区-精品蜜桃秘一区二区三区粉嫩-精品蜜桃一区二区三区-精品蜜臀国产aⅴ一区二区三区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

分享七種常用的js去重小妙招 一學就會的那種哦!

admin
2024年12月19日 20:40 本文熱度 434

1.利用ES6的Set

 Set是一種新的數據結構,它的成員具有唯一性。可以將數組轉換為Set,再轉換回數組來實現去重。

let arr = [1, 2, 2, 3, 4, 4];

let uniqueArr = [...new Set(arr)];

console.log(uniqueArr); // [1, 2, 3, 4] 

  這種方法非常簡潔,而且效率較高。它適用于數組元素是基本數據類型(如數字、字符串、布爾值)或者是引用數據類型(對象、數組等)且希望根據引用是否相同來去重的情況。

 

2. 利用filter和indexOf 

可以通過 filter 方法遍歷數組,只保留第一個出現的元素,即索引為 0 的元素。

let arr = [1, 2, 2, 3, 4, 4];

let uniqueArr = arr.filter((element, index) => {

    return arr.indexOf(element) === index;

});

console.log(uniqueArr); // [1, 2, 3, 4] 

 這種方法的原理是 indexOf 返回元素在數組中第一次出現的位置,如果當前元素的索引和 indexOf 返回的索引相同,說明這個元素是第一次出現,就將其保留下來。不過這種方法對于包含對象等引用數據類型的數組,如果對象內容相同但引用不同,可能無法達到理想的去重效果。

 

3. 利用雙重循環(傳統方法) 

 這種方法比較直觀,但效率相對較低。外層循環遍歷數組,內層循環檢查當前元素后面的元素是否與之重復,若重復則刪除。

let arr = [1, 2, 2, 3, 4, 4];

for (let i = 0; i < arr.length; i++) {

    for (let j = i + 1; j < arr.length; j++) {

        if (arr[i] === arr[j]) {

            arr.splice(j, 1);

            j--;

        }

    }

}

console.log(arr); // [1, 2, 3, 4] 

在這里,當發現重復元素時,使用 splice 方法將其刪除,并且需要將內層循環的索引 j 減 1 ,因為刪除元素后數組長度和元素索引都發生了變化,否則可能會跳過一些元素。

 

4. 利用對象的屬性來記錄元素是否出現過(適用于基本數據類型) 

創建一個空對象,遍歷數組,將數組元素作為對象的屬性名,屬性值可以是任意值(比如 true )。如果對象中不存在該屬性,就將元素添加到新數組中,并在對象中記錄該屬性;如果已經存在,則說明元素重復,跳過該元素。

let arr = [1, 2, 2, 3, 4, 4];

let uniqueArr = [];

let obj = {};

for (let i = 0; len = arr.length; i < len; i++) {

    let element = arr[i];

    if (!obj[element]) {

        uniqueArr.push(element);

        obj[element] = true;

    }

}

console.log(uniqueArr); // [1, 2, 3, 4] 

 這種方法在處理基本數據類型時速度比較快,但如果數組元素是對象等引用數據類型,需要根據對象的內容來判斷是否重復,這種方法就需要修改,比如對對象進行序列化(如使用 JSON.stringify )后作為屬性名來判斷。


5.利用for循環和includes方法
- 思路是創建一個新的數組,通過 for 循環遍歷原始數組。對于每個元素,檢查它是否已經存在于新數組中(使用 includes 方法)。如果不存在,就將其添加到新數組中。
- 示例代碼如下:

let arr = [1, 2, 2, 3, 4, 4];

let newArr = [];

for (let i = 0; i < arr.length; i++) {

    if (!newArr.includes(arr[i])) {

        newArr.push(arr[i]);

    }

}

console.log(newArr);

這種方法的優點是比較直觀,容易理解。但是 includes 方法在某些瀏覽器中的性能可能不是最優的,特別是對于大型數組。


6. 利用Map數據結構

與使用對象進行去重類似,不過 Map 有一些額外的優勢,比如可以更好地處理對象等復雜數據類型(通過合適的鍵值設置)。
 思路是創建一個 Map 對象,遍歷數組。對于每個元素,檢查 Map 中是否已經存在對應的鍵。如果不存在,就將元素添加到新數組中,并在 Map 中設置鍵值對(鍵為元素,值可以是任意值,比如 true )。
示例代碼如下:

let arr = [1, 2, 2, 3, 4, 4];

let newArr = [];

let map = new Map();

for (let i = 0; i < arr.length; i++) {

    if (!map.has(arr[i])) {

        newArr.push(arr[i]);

        map.set(arr[i], true);

    }

}

console.log(newArr); 

  Map 的 has 和 set 方法在處理數據時比較高效,而且 Map 可以更方便地處理復雜數據類型,因為它的鍵可以是任意數據類型,不像普通對象的鍵必須是字符串或符號。


7. 利用reduce方法
reduce 方法可以對數組中的每個元素執行一個由您提供的reducer函數(升序執行),將其結果匯總為單個返回值。
- 思路是使用 reduce 函數,初始值是一個空數組。在每次迭代中,檢查累積數組( accumulator )中是否已經包含當前元素。如果不包含,就將其添加到累積數組中。
 示例代碼如下:

let arr = [1, 2, 2, 3, 4, 4];

let newArr = arr.reduce((acc, cur) => {

    if (!acc.includes(cur)) {

        acc.push(cur);

    }

    return acc;

}, []);

console.log(newArr);

 這種方法可以將去重操作和其他數據處理操作結合起來,在對數組進行匯總和轉換的同時實現去重,不過對于簡單的去重場景可能會顯得稍微復雜一些。


該文章在 2024/12/20 11:25:05 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 无码一区二区三区aⅴ免费 无码一区二区精品视频久久久 | 欧美人与物videos另类 | 无码少妇丰满熟妇一区二区 | 国产精品无码不卡一区二区三区 | 成人免费区一区二区三区 | 国产成人精品尤物一区二区 | 国产欧美日韩综合精品一级 | 激情内射亚洲一区二区三区爱妻 | 国产超碰人人做人人爽av大片 | 制服丝袜国产日韩 | 日韩一卡2卡3卡4卡新区亚洲 | 亚洲综合色婷婷七月丁香 | 日韩欧美精品有码在线 | 国产精品成人观看视频 | 囯产精品流白浆高潮免费A片 | 亚洲一区无码精品色试看 | 国产一区内射最近更新 | 日韩毛片三区 | 中出丰满人妻隐秘中文字幕 | 日韩欧美国产专区一区 | 亚洲级久久久久精品毛片 | 97无码视频在线看视频 | 麻豆视频国产剧情演绎 | 国产在线精品视频二区 | 一本一道aⅴ无码中文字幕 一本一道aⅴ无码 | 91桃色含羞草片多多 | 性无码一区二区三 | 欧美人与动牲猛交xxxxbbbb | 高清AV熟女一区 | 久久久久久久国产 | 亚洲精品久久久口爆吞精 | 少妇高清精品毛片在线视频 | 国产精品免费无遮挡无码永久视频亚洲爆乳无码一区二区三区 | 亚洲国产精品无码专区 | 亚洲国产aⅴ精品一区二区女女 | 日韩欧美亚洲国产精品字幕久久久 | 91久久精品亚洲中文字幕无 | 欧产日产国产色情 | 欧美日韩精品一区二区三区高清视频 | 无码精品人妻一区二区三区中 | 亚洲av中文无码乱人伦不卡顿 |