狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

分享七種常用的js去重小妙招 一學(xué)就會(huì)的那種哦!

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

1.利用ES6的Set

 Set是一種新的數(shù)據(jù)結(jié)構(gòu),它的成員具有唯一性。可以將數(shù)組轉(zhuǎn)換為Set,再轉(zhuǎn)換回?cái)?shù)組來(lái)實(shí)現(xiàn)去重。

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

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

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

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

 

2. 利用filter和indexOf 

可以通過(guò) filter 方法遍歷數(shù)組,只保留第一個(gè)出現(xiàn)的元素,即索引為 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 返回元素在數(shù)組中第一次出現(xiàn)的位置,如果當(dāng)前元素的索引和 indexOf 返回的索引相同,說(shuō)明這個(gè)元素是第一次出現(xiàn),就將其保留下來(lái)。不過(guò)這種方法對(duì)于包含對(duì)象等引用數(shù)據(jù)類型的數(shù)組,如果對(duì)象內(nèi)容相同但引用不同,可能無(wú)法達(dá)到理想的去重效果。

 

3. 利用雙重循環(huán)(傳統(tǒng)方法) 

 這種方法比較直觀,但效率相對(duì)較低。外層循環(huán)遍歷數(shù)組,內(nèi)層循環(huán)檢查當(dāng)前元素后面的元素是否與之重復(fù),若重復(fù)則刪除。

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] 

在這里,當(dāng)發(fā)現(xiàn)重復(fù)元素時(shí),使用 splice 方法將其刪除,并且需要將內(nèi)層循環(huán)的索引 j 減 1 ,因?yàn)閯h除元素后數(shù)組長(zhǎng)度和元素索引都發(fā)生了變化,否則可能會(huì)跳過(guò)一些元素。

 

4. 利用對(duì)象的屬性來(lái)記錄元素是否出現(xiàn)過(guò)(適用于基本數(shù)據(jù)類型) 

創(chuàng)建一個(gè)空對(duì)象,遍歷數(shù)組,將數(shù)組元素作為對(duì)象的屬性名,屬性值可以是任意值(比如 true )。如果對(duì)象中不存在該屬性,就將元素添加到新數(shù)組中,并在對(duì)象中記錄該屬性;如果已經(jīng)存在,則說(shuō)明元素重復(fù),跳過(guò)該元素。

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] 

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


5.利用for循環(huán)和includes方法
- 思路是創(chuàng)建一個(gè)新的數(shù)組,通過(guò) for 循環(huán)遍歷原始數(shù)組。對(duì)于每個(gè)元素,檢查它是否已經(jīng)存在于新數(shù)組中(使用 includes 方法)。如果不存在,就將其添加到新數(shù)組中。
- 示例代碼如下:

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);

這種方法的優(yōu)點(diǎn)是比較直觀,容易理解。但是 includes 方法在某些瀏覽器中的性能可能不是最優(yōu)的,特別是對(duì)于大型數(shù)組。


6. 利用Map數(shù)據(jù)結(jié)構(gòu)

與使用對(duì)象進(jìn)行去重類似,不過(guò) Map 有一些額外的優(yōu)勢(shì),比如可以更好地處理對(duì)象等復(fù)雜數(shù)據(jù)類型(通過(guò)合適的鍵值設(shè)置)。
 思路是創(chuàng)建一個(gè) Map 對(duì)象,遍歷數(shù)組。對(duì)于每個(gè)元素,檢查 Map 中是否已經(jīng)存在對(duì)應(yīng)的鍵。如果不存在,就將元素添加到新數(shù)組中,并在 Map 中設(shè)置鍵值對(duì)(鍵為元素,值可以是任意值,比如 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 方法在處理數(shù)據(jù)時(shí)比較高效,而且 Map 可以更方便地處理復(fù)雜數(shù)據(jù)類型,因?yàn)樗逆I可以是任意數(shù)據(jù)類型,不像普通對(duì)象的鍵必須是字符串或符號(hào)。


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

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);

 這種方法可以將去重操作和其他數(shù)據(jù)處理操作結(jié)合起來(lái),在對(duì)數(shù)組進(jìn)行匯總和轉(zhuǎn)換的同時(shí)實(shí)現(xiàn)去重,不過(guò)對(duì)于簡(jiǎn)單的去重場(chǎng)景可能會(huì)顯得稍微復(fù)雜一些。


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