史上最全JavaScript数组去重的十种方法(推荐)

13 篇文章 0 订阅
2 篇文章 0 订阅

一、前言:

我们在实际工作中,或者在面试找工作时,都会用到或者被问到一个问题,那就是“数组如何去重”。是的,这个问题有很多种解决方案,看看下面的十种方式吧!

二、数组去重方式大汇总:

Methods 1: 思路:定义一个新数组,并存放原数组的第一个元素,然后将元素组一一和新数组的元素对比,若不同则存放在新数组中。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

function unique(arr){

 var res = [arr[0]];

 for(var i=1; i<arr.length; i++){

  var repeat = false;

  for(var j=0; j<res.length; j++){

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

    repeat = true;

    break;

   }

  }

  if(!repeat){

   res.push(arr[i]);

  }

 }

 return res;

}

console.log('------------方法一---------------');

 

console.log(unique([1,1,2,3,5,3,1,5,6,7,4]));

Methods 2: 思路:先将原数组排序,在与相邻的进行比较,如果不同则存入新数组。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

function unique2(arr){

 var arr2 = arr.sort();

 var res = [arr2[0]];

 for(var i=1; i<arr2.length; i++){

  if(arr2[i] !== res[res.length-1]){

   res.push(arr2[i]);

  }

 }

 return res;

}

 

console.log('------------方法二---------------');

 

console.log(unique2([1,1,2,3,5,3,1,5,6,7,4]));

Methods 3: 利用对象属性存在的特性,如果没有该属性则存入新数组。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

function unique3(arr){

 var res = [];

 var obj = {};

 for(var i=0; i<arr.length; i++){

  if( !obj[arr[i]] ){

   obj[arr[i]] = 1;

   res.push(arr[i]);

  }

 }

 return res;

}

 

console.log('------------方法三---------------');

 

console.log(unique3([1,1,2,3,5,3,1,5,6,7,4]));

Methods 4: 利用数组的indexOf下标属性来查询。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

function unique4(arr){

 var res = [];

 for(var i=0; i<arr.length; i++){

  if(res.indexOf(arr[i]) == -1){

   res.push(arr[i]);

  }

 }

 return res;

}

 

console.log('------------方法四---------------');

 

console.log(unique4([1,1,2,3,5,3,1,5,6,7,4]));

Methods 5: 利用数组原型对象上的includes方法。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

function unique5(arr){

 var res = [];

  

 for(var i=0; i<arr.length; i++){

  if( !res.includes(arr[i]) ){ // 如果res新数组包含当前循环item

   res.push(arr[i]);

  }

 }

 return res;

}

 

console.log('------------方法五---------------');

 

console.log(unique5([1,1,2,3,5,3,1,5,6,7,4]));

Methods 6: 利用数组原型对象上的 filter 和 includes方法。

?

1

2

3

4

5

6

7

8

9

10

11

12

function unique6(arr){

 var res = [];

  

 res = arr.filter(function(item){

  return res.includes(item) ? '' : res.push(item);

 });

 return res;

}

 

console.log('------------方法六---------------');

 

console.log(unique6([1,1,2,3,5,3,1,5,6,7,4]));

Methods 7: 利用数组原型对象上的 forEach 和 includes方法。

?

1

2

3

4

5

6

7

8

9

10

11

12

function unique7(arr){

 var res = [];

  

 arr.forEach(function(item){

  res.includes(item) ? '' : res.push(item);

 });

 return res;

}

 

console.log('------------方法七---------------');

 

console.log(unique7([1,1,2,3,5,3,1,5,6,7,4]));

Methods 8: 利用数组原型对象上的 splice 方法。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

function unique8(arr){

 var i,

  j,

  len = arr.length;

 for(i = 0; i < len; i++){

  for(j = i + 1; j < len; j++){

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

    arr.splice(j,1);

    len--;

    j--;

   }

  }

 }

 return arr;

}

 

console.log('------------方法八---------------');

 

console.log(unique8([1,1,2,3,5,3,1,5,6,7,4]));

Methods 9: 利用数组原型对象上的 lastIndexOf 方法。

?

1

2

3

4

5

6

7

8

9

10

11

function unique9(arr){

 var res = [];

 for(var i=0; i<arr.length; i++){

  res.lastIndexOf(arr[i]) !== -1 ? '' : res.push(arr[i]);

 }

 return res;

}

 

console.log('------------方法九---------------');

 

console.log(unique9([1,1,2,3,5,3,1,5,6,7,4]));

Methods 10: 利用 ES6的set 方法。

?

1

2

3

4

5

6

7

8

function unique10(arr){

 //Set数据结构,它类似于数组,其成员的值都是唯一的

 return Array.from(new Set(arr)); // 利用Array.from将Set结构转换成数组

}

 

console.log('------------方法十---------------');

 

console.log(unique10([1,1,2,3,5,3,1,5,6,7,4]));

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔡俊锋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值