總結(jié)Javascript中數(shù)組各種去重的方法
前言
在做javascript開(kāi)發(fā)的時(shí)候,經(jīng)常會(huì)遇到數(shù)組元素重復(fù)的問(wèn)題,而javascript Array又沒(méi)有直接提供方法解決此問(wèn)題,還需要自己去實(shí)現(xiàn)。這篇文章總結(jié)了Javascript中數(shù)組各種去重的方法,下面來(lái)一起看看。
方法一 利用對(duì)象屬性不重復(fù)的特性
Array.prototype.distinct = function (){ var arr = this, i, obj = {}, result = [], len = arr.length; for(i = 0; i< arr.length; i++){ if(!obj[arr[i]]){ //如果能查找到,證明數(shù)組元素重復(fù)了 obj[arr[i]] = 1; result.push(arr[i]); } } return result; };
方法二 雙層循環(huán),外層循環(huán)元素,內(nèi)層循環(huán)時(shí)比較值
Array.prototype.distinct = function(){ var arr = this, result = [], i, j, len = arr.length; for(i = 0; i < len; i++){ for(j = i + 1; j < len; j++){ if(arr[i] === arr[j]){ j = ++i; } } result.push(arr[i]); } return result; }
方法三 數(shù)組遞歸去重
Array.prototype.distinct = function (){ var arr = this, len = arr.length; arr.sort(function(a,b){ //對(duì)數(shù)組進(jìn)行排序才能方便比較 return a - b; }) function loop(index){ if(index >= 1){ if(arr[index] === arr[index-1]){ arr.splice(index,1); } loop(index - 1); //遞歸loop函數(shù)進(jìn)行去重 } } loop(len-1); return arr; };
方法四 利用indexOf以及forEach
Array.prototype.distinct = function (){ var arr = this, result = [], len = arr.length; arr.forEach(function(v, i ,arr){ //這里利用map,filter方法也可以實(shí)現(xiàn) var bool = arr.indexOf(v,i+1); //從傳入?yún)?shù)的下一個(gè)索引值開(kāi)始尋找是否存在重復(fù) if(bool === -1){ result.push(v); } }) return result; };
方法五 利用ES6的set
function dedupe(array){ return Array.from(new Set(array)); } dedupe([1,1,2,3]) //[1,2,3]
方法六 拓展運(yùn)算符(…)內(nèi)部使用for…of循環(huán)
let arr = [3,5,2,2,5,5]; let unique = [...new Set(arr)]; //[3,5,2]
總結(jié)
好了,以上就是這篇文章的全部?jī)?nèi)容了,個(gè)人比較喜歡使用方法一,不會(huì)對(duì)原數(shù)組進(jìn)行修改,希望這篇文章對(duì)大家能有所幫助,如果有疑問(wèn)大家可以留言交流。
- js數(shù)組去重的常用方法總結(jié)
- js取兩個(gè)數(shù)組的交集|差集|并集|補(bǔ)集|去重示例代碼
- js算法中的排序、數(shù)組去重詳細(xì)概述
- js實(shí)現(xiàn)數(shù)組去重、判斷數(shù)組以及對(duì)象中的內(nèi)容是否相同
- 關(guān)于js數(shù)組去重的問(wèn)題小結(jié)
- 兩個(gè)數(shù)組去重的JS代碼
- js數(shù)組去重的5種算法實(shí)現(xiàn)
- javascript數(shù)組去重3種方法的性能測(cè)試與比較
- javascript數(shù)字?jǐn)?shù)組去重復(fù)項(xiàng)的實(shí)現(xiàn)代碼
- JavaScript數(shù)組去重的五種方法
相關(guān)文章
js實(shí)現(xiàn)首屏延遲加載實(shí)現(xiàn)方法 js實(shí)現(xiàn)多屏單張圖片延遲加載效果
這篇文章主要介紹了js實(shí)現(xiàn)首屏延遲加載實(shí)現(xiàn)方法,以及js實(shí)現(xiàn)多屏單張圖片延遲加載效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07使用OPENLAYERS3實(shí)現(xiàn)點(diǎn)選的方法
這篇文章主要為大家詳細(xì)介紹了使用OPENLAYERS3實(shí)現(xiàn)點(diǎn)選的幾種方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-0715個(gè)非常實(shí)用的JavaScript代碼片段
這篇文章主要為大家詳細(xì)介紹了15個(gè)非常實(shí)用的JavaScript代碼片段,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12JavaScript空數(shù)組的every()方法實(shí)踐
every()方法用于檢測(cè)數(shù)組中的所有元素是否都滿(mǎn)足指定條件, 本文主要介紹了JavaScript空數(shù)組的every()方法實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03javascript 動(dòng)態(tài)改變層的Z-INDEX的代碼style.zIndex
javascript 動(dòng)態(tài)改變層的Z-INDEX的代碼style.zIndex...2007-08-08High Performance JavaScript(高性能JavaScript)讀書(shū)筆記分析
High Performance JavaScript(高性能JavaScript)讀書(shū)筆記,讓你的js代碼更有效率。2011-05-05