原生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()

第三種方法:下標判斷法

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()

第四種方法:排序后在去重

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/Set

下面給出代碼!

[...new Set([1,1,2,2,3,3])];//[1,2,3]

代碼就這一句,利用的是Set中的元素是唯一的,只會出現一次的特性,這里還有一個概念:“...”

…(擴展運算符)

擴展運算符:將一個數組轉為用逗號分隔的參數序列

這樣以來就很清楚了,黑科技是不是很神奇,其實這也是大廠的一道面試題,說的是請用最少的代碼實現數組去重

新人如有錯誤,往指正,以免誤導別人~拜謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM