分享七種常用的js去重小妙招 一學(xué)就會(huì)的那種哦!
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
1.利用ES6的Set Set是一種新的數(shù)據(jù)結(jié)構(gòu),它的成員具有唯一性。可以將數(shù)組轉(zhuǎn)換為Set,再轉(zhuǎn)換回?cái)?shù)組來實(shí)現(xiàn)去重。
這種方法非常簡潔,而且效率較高。它適用于數(shù)組元素是基本數(shù)據(jù)類型(如數(shù)字、字符串、布爾值)或者是引用數(shù)據(jù)類型(對(duì)象、數(shù)組等)且希望根據(jù)引用是否相同來去重的情況。
2. 利用filter和indexOf 可以通過 filter 方法遍歷數(shù)組,只保留第一個(gè)出現(xiàn)的元素,即索引為 0 的元素。
這種方法的原理是 indexOf 返回元素在數(shù)組中第一次出現(xiàn)的位置,如果當(dāng)前元素的索引和 indexOf 返回的索引相同,說明這個(gè)元素是第一次出現(xiàn),就將其保留下來。不過這種方法對(duì)于包含對(duì)象等引用數(shù)據(jù)類型的數(shù)組,如果對(duì)象內(nèi)容相同但引用不同,可能無法達(dá)到理想的去重效果。
3. 利用雙重循環(huán)(傳統(tǒng)方法) 這種方法比較直觀,但效率相對(duì)較低。外層循環(huán)遍歷數(shù)組,內(nèi)層循環(huán)檢查當(dāng)前元素后面的元素是否與之重復(fù),若重復(fù)則刪除。
在這里,當(dāng)發(fā)現(xiàn)重復(fù)元素時(shí),使用 splice 方法將其刪除,并且需要將內(nèi)層循環(huán)的索引 j 減 1 ,因?yàn)閯h除元素后數(shù)組長度和元素索引都發(fā)生了變化,否則可能會(huì)跳過一些元素。
4. 利用對(duì)象的屬性來記錄元素是否出現(xiàn)過(適用于基本數(shù)據(jù)類型) 創(chuàng)建一個(gè)空對(duì)象,遍歷數(shù)組,將數(shù)組元素作為對(duì)象的屬性名,屬性值可以是任意值(比如 true )。如果對(duì)象中不存在該屬性,就將元素添加到新數(shù)組中,并在對(duì)象中記錄該屬性;如果已經(jīng)存在,則說明元素重復(fù),跳過該元素。
這種方法在處理基本數(shù)據(jù)類型時(shí)速度比較快,但如果數(shù)組元素是對(duì)象等引用數(shù)據(jù)類型,需要根據(jù)對(duì)象的內(nèi)容來判斷是否重復(fù),這種方法就需要修改,比如對(duì)對(duì)象進(jìn)行序列化(如使用 JSON.stringify )后作為屬性名來判斷。 5.利用for循環(huán)和includes方法
這種方法的優(yōu)點(diǎn)是比較直觀,容易理解。但是 includes 方法在某些瀏覽器中的性能可能不是最優(yōu)的,特別是對(duì)于大型數(shù)組。
Map 的 has 和 set 方法在處理數(shù)據(jù)時(shí)比較高效,而且 Map 可以更方便地處理復(fù)雜數(shù)據(jù)類型,因?yàn)樗逆I可以是任意數(shù)據(jù)類型,不像普通對(duì)象的鍵必須是字符串或符號(hào)。
這種方法可以將去重操作和其他數(shù)據(jù)處理操作結(jié)合起來,在對(duì)數(shù)組進(jìn)行匯總和轉(zhuǎn)換的同時(shí)實(shí)現(xiàn)去重,不過對(duì)于簡單的去重場景可能會(huì)顯得稍微復(fù)雜一些。 該文章在 2024/12/20 11:25:05 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |