国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript數(shù)組去重的幾種方法

2024-05-06 15:41:00
字體:
供稿:網(wǎng)友

前言

有時候我們做項目的時候往往會需要把數(shù)組里面一些重復(fù)的項去掉,但是原生JS有排序,有篩選等等,但是就是沒有數(shù)組去重怎么辦呢?

這能怎么辦,自己手動實現(xiàn)嘛。

數(shù)組不像對象和hash有唯一的標(biāo)志特征(key)。所以,數(shù)組去重的核心就是【1】數(shù)組內(nèi)元素互相比較,然后放入新的數(shù)組中。【2】參照對象構(gòu)建一個唯一的特征標(biāo)志,然后放入新數(shù)組中。以下就是依照這種思路產(chǎn)生的方法。【3】數(shù)組中含對象的去重方式我采用使用JSON.stringify()將對象轉(zhuǎn)換成JSON字符串進行比較的方式。

1.最基礎(chǔ)的去重:雙重遍歷

雙重遍歷的核心就是依據(jù)【1】,通過拿出一個元素和剩下的元素依次比較,如果全部不相等則證明此元素為唯一。

let a=[{a:1},{b:2},{c:3},{a:1},{d:2}]let c=[1,2,3,4,5,6,1,2,3]function unique(arr){ let b=[] for(let i=0;i<arr.length;i++){ let unexit=true for(let j=i+1;j<arr.length;j++){  if(JSON.stringify(arr[i])===JSON.stringify(arr[j])){  unexit=false  break  }  else{  unexit=true  } } if(unexit){  b.push(arr[i]) } } return b}

關(guān)于數(shù)組中存在對象,是采用JSON.stringify()轉(zhuǎn)換成JSON字符串進行的比較,后續(xù)不再敘述。雙重遍歷的缺點是復(fù)雜度太高。
上面的代碼去重得到的結(jié)果的順序會改變,所以如果想要順序按照原有順序,數(shù)組在進行去重時建議重新申明一個新的數(shù)組(var new=old.reverse() )得到一個新的相反的數(shù)組,最后再使用reverse()。之所以新建數(shù)組而不是直接取反是因為:reverse()會修改原數(shù)組。

2.Array.prototype.sort():相鄰元素去重

相鄰元素去重的核心在于Array.sort()能夠?qū)?shù)組進行排序。這樣相等的數(shù)組就會在相鄰的位置,通過比較相鄰的元素就可以起到去重的作用【1】。

let c=[1,2,3,4,5,6,1,2,3]function unique(arr){ let Arr=arr.sort() let b=[] for(let i=0;i<Arr.length;i++){ if(Arr[i]!==Arr[i+1]){  b.push(Arr[i]) } } return b}

Array.prototype.sort()方法可以使用array.sort((a,b)=>{a.key-b.ky})進行對象的排序,前提是數(shù)組中的對象存在相同的key值。

3.Object.keys():存在唯一性

在一個對象里面key值是唯一的,所以通過遍歷數(shù)組給每個數(shù)組一個標(biāo)志,通過標(biāo)志去重【2】

let a=[{a:1},{b:2},{c:3},{a:1},{d:2}]let c=[1,2,3,4,5,6,1,2,3]function unique(arr){ let b=[] let hash={} for(let i=0;i<arr.length;i++){ if(!hash[JSON.stringify(arr[i])]){  hash[JSON.stringify(arr[i])]=true  b.push(arr[i]) } } return b}

4.雙重遍歷去重改良之:indexOf

雙重遍歷的思路我們都知道,先拿出一個元素,然后使用循環(huán)再次遍歷數(shù)組去一一比較。如果有一個方式能夠讓我們不再遍歷一遍數(shù)組,那么復(fù)雜度相對而言會減少一點。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 垫江县| 饶河县| 大同市| 巴彦县| 汉阴县| 承德县| 栾川县| 砀山县| 沛县| 荃湾区| 峨眉山市| 乌审旗| 马龙县| 太仆寺旗| 江津市| 杭州市| 茂名市| 津市市| 沧源| 永和县| 泗水县| 唐河县| 巴林右旗| 六盘水市| 大厂| 临湘市| 涿鹿县| 永安市| 沁水县| 宜兰县| 盘锦市| 吉水县| 宜君县| 伊春市| 巴彦县| 镇原县| 郸城县| 佛坪县| 娄烦县| 博兴县| 唐河县|