1. 程式人生 > >原生JS陣列去重的幾種方法

原生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中的元素是唯一的,只會出現一次的特性,這裡還有一個概念:“...”

…(擴充套件運算子)

擴充套件運算子:將一個數組轉為用逗號分隔的引數序列

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

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