有時候咱們作項目的時候每每會須要把數組裏面一些重複的項去掉,可是原生JS有排序,有篩選等等,可是就是沒有數組去重怎麼辦呢?
這能怎麼辦,本身手動實現嘛。(如下代碼直接在原型上添加的的方法,爲的就是和原生JS方法相似)能夠達到Array.xxx()這樣的效果前端
第一種方法:建立空數組利用indexOf方法檢測就數組的項是否在新數組中。面試
Array.prototype.unique=function(){ var arr=[];//建立新數組 for(var i=0;i<this.length;i++){ //遍歷當前數組 if(arr.indexOf(this[i])===-1){//若是等於-1,那麼也是就是新數組中沒有一項和當前數組同樣 arr.push(this[i]) } } return arr; } //調用:ary.unique()
第二種方法:建立空數組和空對象,判斷數組是否在對象中數組
Array.prototype.unique=function(){ var tmp={},arr=[] for(var i=0;i<this.length;i++){ if(!tmp[this[i]]){//若是tmp中沒有this[i] tmp[this[i]]=true;//存入 arr.push(this[i]);//添加到新數組中 } } return arr } //調用:ary.unique()
第三種方法:下標判斷法this
Array.prototype.unique=function(){ var arr=[this[0]]; for(var i=1;i<this.length;i++){ //遍歷當前數組,從第二項開始遍歷 if(this.indexOf(this[i])===i){//若是當前數組的第i項是i那麼就存入新的數組 arr.push(this[i]) } } return arr; } //調用:ary.unique()
第四種方法:排序後在去重prototype
Array.prototype.unique=function(){ var arr=[]; this.sort() for(var i=0;i<this.length;i++){ if(this[i]!==arr[arr.length-1]){ arr.push(this[i]) } } return arr; } //調用:ary.unique()
第五種方法:黑科技new Set數組去重設計
首先咱們先介紹下new Set對象
new Set是來自於ES6,Set對象是值的集合,你能夠按照插入的順序迭代它的元素。 Set中的元素只會出現一次,即 Set 中的元素是惟一的。排序
你們能夠去看下MDN文檔連接地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Setip
下面給出代碼!文檔
[...new Set([1,1,2,2,3,3])];//[1,2,3]
代碼就這一句,利用的是Set中的元素是惟一的,只會出現一次的特性,這裏還有一個概念:「...」
…(擴展運算符)
擴展運算符:將一個數組轉爲用逗號分隔的參數序列
這樣以來就很清楚了,黑科技是否是很神奇,其實這也是大廠的一道面試題,說的是請用最少的代碼實現數組去重
新人若有錯誤,往指正,以避免誤導別人~拜謝!
不會作設計的前端不是好SEOer