首頁 >web前端 >js教程 >JS數組去重方法總結

JS數組去重方法總結

小云云
小云云原創
2018-03-17 16:36:021732瀏覽

本文主要和大家分享JS陣列去重方法總結,一共有七種方法,希望能幫助大家。

最簡單的方法:

?

#


方法一:

雙層循環,外層循環元素,內層循環時比較值

如果有相同的值則跳過,不相同則push進數組

?

#1

#2

##3

#4

5

#6

7

8#

9

10

#11

12

13

14

#15

16

17

18











##var arr=[2,8,5,0,5,2,6,7,2];
#function unique1(arr){
  var hash =[] ;

  for (var i = 0; i ##}
#arra = [1,2,3,4,4,1,1,2,1,1,1];
##1

#2

3

4

5

6

7

8

9

10

11

12

#13

14

15

16

17

18


#

Array.prototype.distinct = function#(){

 ##var#arr = 這個,

  #結果= [],

  i,

  #j,

  len = arr.length;

 for(i = 0; i

#

  for(j = i + 1; j

   if(arr[i] === arr[j]){

#    j = ++i;

   }

  #}

##   result.push(arr[i]);

 #}

 return result;

#}

#########arra.distinct();    ########## ###//返回[3,4,2,1]###################

方法二:利用splice直接在原始數組進行運算

#雙層循環,外層循環元素,內層循環時比較值

值相同時,則刪除這個值

注意點:刪除元素之後,需要將陣列的長度也減1.

?

#1

2

3

4

5

#6

7

8

9

10

11

#12

#13

#14

15

16

17

18

#19


##

Array.prototype.distinct = function (){

 ##var#arr = 這個,

  #i,

#######################################################################################

  j,

  len = arr.length;

############################################# ######for######(i = 0; i   for(j = i + 1; j <p class="line number8 index7 alt1" style="line-height:15.4px;margin:0px;padding:0px 1em;background-image:none;border:0px;float:none;height:auto;vertical-align:baseline;width:auto;min-height:auto;white-space:pre;"><code class="js spaces" style="margin:3px auto 0px;padding:0px 0px 0px 5px;background:rgb(255,255,255);border-left:3px solid rgb(108,226,108);width:640px;font-size:14px;clear:both;border-top:0px;border-right:0px;border-bottom:0px;float:none;height:auto;vertical-align:baseline;font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;min-height:auto;">   if(arr[i] == arr[j]){

#    arr.splice(j,1);

    len--;

#    #j--;

######################################################### #######}##################}#######

 }

 ##arr;

######################################### # ##};############var### ###a = [1,2,3,4,5,6,5,3,2,4,56,4 , 1,2,1,1,1,1,1,1,];######

var#b = a.distinct();

#console.log(b.toString()); //1,2,3,4,5,6,56

#

優點:簡單易懂

缺點:佔用記憶體高,速度慢

#方法三:利用物件的屬性不能相同的特點進行去重

?

#1

2

#3

4

5

6

7

8

9

10

11

12

#13

14

15

16

17


#Array.prototype.distinct = function (){

 ##var#arr = 這個,

  #i,

#######################################################################################

  obj = {},

  結果 = [],

#  len = arr.length;

for(i = 0; i

  if(!obj[arr[i]]){ //如果能查找到,證明陣列元素重複了

   obj[arr[i]] = 1;

   #result.push(arr[ i]);

#

  }

 }

 

######################################################################################返回######結果;############};#######

var#a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1 , 1,1,1,];

var#b = a.distinct();

console .log (b.toString()); //1,2,3,4,5,6,56

#

方法四:陣列遞歸去重

運用遞歸的想法

先排序,然後從最後開始比較,遇到相同,則刪除


?

1

# 2

3

4

5

6

7

8

9

10

11

#12

#13

#14

15

16

17

18

#19

#20


Array.prototype.distinct = function (){

 ##var#arr = this,

  len = arr.length;#

 arr.sort(function(a,b){  //對陣列進行排序才能方便比較

  return a - b;

 })

## 函數 loop(索引){

  if(索引>= 1){

   if(arr[index] === arr[index-1]){

    ##arr.splice(index,1);

   }

########################################################### ##   ######loop(index - 1); ######//遞迴loop函數進行去重新化###########  #######}## ####

 }

 #loop(len-1);

返回#arr;

};

var#a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1 , 1,1,1,56,45,56];

var#b = a.distinct();

############################################## ## ##console.log(b.toString());  ######//1,2,3,4,5,6,45,56##################

方法五:利用indexOf以及forEach

#?

##1

2

3

4#######5#####6#####7##### ##8######9###

10

11

12

13

14

15


Array.prototype.distinct = function#(){

#

 var arr = this#,

  

############################################################################################################ # ###result = [],############  #######len = arr.length;######

 arr.forEach(function(v, i ,arr){  //這裡利用map,filter方法也可以實作

  var bool = arr.indexOf(v,i+1);  #//從傳入參數的下一個索引值開始尋找是否存在重複

  if(bool === -1){

   result.push( v);

  }

##})

 return 結果;

#};

##var a = [1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3 ,2,3,3,2,2,1,23,1,23,2,3,2,3,2,3];

var b = a.distinct();#

console.log(b.toString()); //1,23,2,3

#

方法六:利用ES6的set

Set資料結構,它類似數組,其成員的值都是唯一的。

利用Array.from將Set結構轉換成陣列

?

1

2

3

4


#

##function#dedupe(array){

return Array.from( new Set(array));

}

重複資料刪除([1,1,2,3]) //[1,2,3]

# ##

拓展運算子(...)內部使用for...of迴圈

?

# 1

2

3


#let arr = [1,2,3,3 ];

let resultarr = [...new#Set(arr)];

console.log(結果); //[1,2,3]

#

下面要為大家補充介紹合併陣列並去重的方法

#一、concat()方法

思路:concat() 方法將傳入的數組或非數組值與原數組合並,組成一個新的數組並返回。此方法會產生一個新的陣列。


1

#2

3

4

5


#

function concatArr(arr1, arr2){

  var arr = arr1.concat (arr2);

  arr = unique1(arr);//再引用上面的任一去重方法

#

  返回 arr;

}

################################################################################################### ##

二、Array.prototype.push.apply()

想法:此方法優點是不會產生一個新的陣列。

?

#1

2

##3

#4

5

6

7

8

9

10


var a = [1, 2, 3];

##var#b = [4, 5, 6];

#Array.prototype.push.apply(a, b);//a=[1,2,3,4,5,6]

//相當於:a.push.apply(a, b) ;

//也等效於[].push.apply(a, b);

#function concatArray(arr1,arr2){

  Array.prototype.push.apply(arr1, arr2);

##  arr1 = unique1(arr1);#

  return arr1;

#相關推薦:

js的陣列去重實例詳解

六種JS陣列去重的方法分享

JavaScript陣列去重的幾種方法分享

以上是JS數組去重方法總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn