亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

JavaScript數組去重的幾種方法

2024-05-06 16:49:38
字體:
來源:轉載
供稿:網友

前言

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

這能怎么辦,自己手動實現嘛。

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

1.最基礎的去重:雙重遍歷

雙重遍歷的核心就是依據【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}

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

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

相鄰元素去重的核心在于Array.sort()能夠對數組進行排序。這樣相等的數組就會在相鄰的位置,通過比較相鄰的元素就可以起到去重的作用【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})進行對象的排序,前提是數組中的對象存在相同的key值。

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

在一個對象里面key值是唯一的,所以通過遍歷數組給每個數組一個標志,通過標志去重【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

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

indexOf 方法返回給定元素在數組中第一次出現的位置,如果沒有出現則返回-1。首先我們新建一個空數組(arry),如果:arry.indexOf(數組元素)===-1,那么我們就可以知道arry中不存在元素。

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

indexOf 方法可返回某個指定的字符串值在字符串中首次出現的位置。所以對象不適用,因為對象轉為字符串就都會變成{object,object} ,無法比較。

5.循環遍歷之:map()/forEach()

map()和forEach()都可以實現遍歷數組。所以以上的方法都可以用map()、forEach()改寫。下面我只簡單的改寫一個,其他的改寫方式參照即可。

let c=[1,2,3,4,5,6,1,2,3]function unique(arr){ let b=[] arr.forEach(res=>{ if(b.indexOf(res)==-1){  b.push(res) } }) return b}

6.ES6:Set數據結構

Set數據類似于數組,但是成員的值都是唯一的,沒有重復的值。它可以接收一個數組,類于:let a=[1,2,3,1,2]  Set(a)=>1,2,3 所以可以使用Set()實現去重。

let c=[1,2,3,4,5,6,1,2,3]function unique(arr){ let b=new Set(arr) let c=Array.from(b) return c}

Set去重不適用于含對象的數組,因為Set的去重參照的是(===),數組中的元素對象,雖然可能數值相等,但是地址不相等。所以Set無法實現去重。

7.總結

實現數組的去重,要么通過元素對比,要么設置特殊標志識別。元素對比的思路有2種:一種是和原數組一一對比;另一種和新的數組對比。

如果要實現含對象的數組去重,一般使用遍歷的方式,包括使用遍歷類的方法(map、forEach、reduce等)。像Set、sort等通過改變數組的方式一般是不可行的。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国模精品一区| 中国人与牲禽动交精品| 国产精品入口免费视频一| 国产精品久久一区主播| 欧美极品美女电影一区| 成人黄色在线观看| 欧美日韩国产成人在线观看| 69**夜色精品国产69乱| 欧美专区福利在线| 97av在线视频免费播放| 欧美一区亚洲一区| 亚洲美腿欧美激情另类| 亚洲欧美日韩精品久久奇米色影视| 26uuu另类亚洲欧美日本一| 在线免费观看羞羞视频一区二区| 岛国视频午夜一区免费在线观看| 国产精品久久久久久影视| 5252色成人免费视频| 午夜精品久久17c| 亚洲国产欧美一区| 日韩精品免费在线视频| 欧美激情久久久| 亚洲区在线播放| 欧美成年人视频| 久久久亚洲国产天美传媒修理工| 麻豆国产精品va在线观看不卡| 国产日韩欧美影视| 26uuu日韩精品一区二区| 国产精品视频一区国模私拍| 91国内揄拍国内精品对白| 日本韩国欧美精品大片卡二| 国产美女精品免费电影| 色播久久人人爽人人爽人人片视av| 国产成人一区二区三区电影| 日韩中文第一页| 日韩精品中文字幕有码专区| 456亚洲影院| 亚洲女人天堂成人av在线| 一级做a爰片久久毛片美女图片| 亚洲成人av在线播放| 亚洲一级免费视频| 久久久999国产精品| 91老司机精品视频| 国产又爽又黄的激情精品视频| 亚洲国产三级网| 国产精品第二页| 亚洲bt欧美bt日本bt| 色99之美女主播在线视频| 国产剧情日韩欧美| 激情懂色av一区av二区av| 亚洲成年网站在线观看| 欧美精品久久一区二区| 久热精品视频在线观看一区| 91丝袜美腿美女视频网站| 欧美最猛黑人xxxx黑人猛叫黄| 日韩成人性视频| 精品视频久久久久久久| 91sao在线观看国产| 久久成年人视频| 欧美黄色成人网| 日韩av影院在线观看| 国产精品视频区1| 久久久久国产视频| 国产一区二区在线播放| 欧美日韩中国免费专区在线看| 欧美国产日本在线| 日韩精品中文字幕在线播放| 久久99久久99精品免观看粉嫩| 欧美激情视频免费观看| 久久精品最新地址| 亚洲a在线播放| 57pao成人永久免费视频| 欧美高清视频在线| 久久99国产精品自在自在app| 尤物yw午夜国产精品视频明星| 国内精品久久久久久中文字幕| 欧美激情综合色综合啪啪五月| 久久久最新网址| 欧美高清视频在线| 日韩av在线天堂网| 久久韩国免费视频| 日韩视频在线观看免费| 久久久久久久久久久亚洲| 欧美激情欧美激情在线五月| 日韩av中文在线| 日本人成精品视频在线| 国产精品夜色7777狼人| 久久国产精品免费视频| 精品国产美女在线| 中日韩美女免费视频网站在线观看| 欧美成人精品一区二区三区| 最新的欧美黄色| 中日韩美女免费视频网址在线观看| 亚洲欧美国产精品va在线观看| 亚洲国产成人在线播放| 亚洲欧美国产高清va在线播| 日韩一区视频在线| 欧美大肥婆大肥bbbbb| 国产精品免费一区豆花| 亚洲欧美日韩一区二区在线| 国产亚洲精品一区二555| 亚洲精品久久久久国产| 欧美一级大片在线免费观看| 国产日韩欧美在线看| 成人日韩在线电影| 最近2019中文字幕大全第二页| 久久久之久亚州精品露出| 亚洲视频在线观看| 亚洲欧美一区二区三区情侣bbw| 亚洲最大福利网| 91精品国产自产在线观看永久| 有码中文亚洲精品| 国产精品免费电影| 深夜福利91大全| 欧美黑人性视频| 欧美激情影音先锋| 国产精品久久久久久五月尺| 91久久精品国产91久久性色| 91久久久久久| 中文字幕亚洲欧美一区二区三区| 国产精品美女免费视频| 国产精品一区二区女厕厕| 久久国产视频网站| 日韩欧美综合在线视频| 中文字幕亚洲精品| 国内精品在线一区| 国产日韩欧美在线视频观看| 日韩中文在线视频| 日韩高清欧美高清| 国产午夜精品视频| 欧美激情手机在线视频| 欧美xxxwww| 久久视频在线观看免费| 国产精品678| 欧美在线一区二区视频| 欧美午夜激情视频| 国产综合福利在线| 日韩高清av在线| 欧美尤物巨大精品爽| www.色综合| 亚洲女同性videos| 久久久久久国产免费| 91网站免费看| 日韩美女免费观看| 国语自产偷拍精品视频偷| 最近2019中文字幕一页二页| 中文字幕亚洲字幕| 日韩av男人的天堂| 国产精品久久久| 91日韩在线播放| 欧美电影在线观看| 伊人久久免费视频| 亚洲色图综合久久| 国产精品日韩欧美| 91性高湖久久久久久久久_久久99| 国产精品视频一区国模私拍| 91国产视频在线| 亚洲成色999久久网站| 亚洲综合一区二区不卡| 97在线视频免费播放| 国产精品偷伦免费视频观看的| 国产视频在线一区二区| 亚洲sss综合天堂久久| 亚洲精品小视频在线观看|