第一種方法:創(chuàng)建空數(shù)組利用indexOf方法檢測就數(shù)組的項是否在新數(shù)組中。
Array.prototype.unique=function(){
? var arr=[];//創(chuàng)建新數(shù)組
? for(var i=0;i<this.length;i++){ //遍歷當(dāng)前數(shù)組
? ????if(arr.indexOf(this[i])===-1){//如果等于-1双肤,那么也是就是新數(shù)組中沒有一項和當(dāng)前數(shù)組一樣
? ????? ????arr.push(this[i])
????????}
????}
????return arr;
}
//調(diào)用:ary.unique()
第二種方法:創(chuàng)建空數(shù)組和空對象施掏,判斷數(shù)組是否在對象中
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]);//添加到新數(shù)組中
????????}
????}????
????return arr
}
//調(diào)用:ary.unique()
第三種方法:下標(biāo)判斷法
Array.prototype.unique=function(){
????var arr=[this[0]];
????for(var i=1;i<this.length;i++){ //遍歷當(dāng)前數(shù)組,從第二項開始遍歷
????????if(this.indexOf(this[i])===i){//如果當(dāng)前數(shù)組的第i項是i那么就存入新的數(shù)組
????????????arr.push(this[i])
????????}
????}
????return arr;
}
//調(diào)用:ary.unique()
第四種方法:排序后在去重
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;
}
//調(diào)用:ary.unique()
第五種方法:黑科技new Set數(shù)組去重
首先我們先介紹下new Set
new Set是來自于ES6,Set對象是值的集合茅糜,你可以按照插入的順序迭代它的元素七芭。 Set中的元素只會出現(xiàn)一次,即 Set 中的元素是唯一的蔑赘。
大家可以去看下MDN文檔鏈接地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Set
下面給出代碼狸驳!
[...newSet([1,1,2,2,3,3])];//[1,2,3]
代碼就這一句,利用的是Set中的元素是唯一的缩赛,只會出現(xiàn)一次的特性耙箍,這里還有一個概念:“...”
…(擴展運算符)
擴展運算符:將一個數(shù)組轉(zhuǎn)為用逗號分隔的參數(shù)序列
這樣以來就很清楚了,黑科技是不是很神奇酥馍,其實這也是大廠的一道面試題究西,說的是請用最少的代碼實現(xiàn)數(shù)組去重
新人如有錯誤,往指正物喷,以免誤導(dǎo)別人~拜謝卤材!