js 數組去重

有時候咱們作項目的時候每每會須要把數組裏面一些重複的項去掉,可是原生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&lt;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

相關文章
相關標籤/搜索