数组去重的几个方法

数组去重很简单,大都运用数组的属性和方法,有很简单的,有复杂的,今天分享几个数组去重的方法。

原理就是创建一个临时数组,循环有重复的数组,判断这个临时数组是否有这个元素,没有就push进去,有就不要。

var arr = ['a', 8, 10, 'd', 20, 'f', 'd', 10, 'a'];

var tempArr = [];
复制代码

IndexOf,中间数组要是没有这个值就push:

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

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

   tempArr.push(arr[i]);  

 }

}
复制代码

Includes,es6方法,也是中间数组没有这个值就push:

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

 if(!tempArr.includes(arr[i])){   

 tempArr.push(arr[i]); 

 }

}
复制代码

角标IndexOf,indexOf会返回第一个目标元素的角标,如果当前角标不等于第一个获得的角标,表示是重复的:

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

 if(arr.indexOf(arr[i]) == i){  

  tempArr.push(arr[i]); 

 }

}
复制代码

先排序再去重,排序完之后,相等的就会相邻,循环排序结果的数组,跟中间数组的最后一个比较,如果没有就push:

var sortArr = arr.sort();

var tempArr = [sortArr[0]];

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

   if(sortArr[i] != tempArr[tempArr.length-1]){  

     tempArr.push(sortArr[i]);  

    }

}
复制代码

最兼容,循环两个数组,设定一个标识,要是去重数组内容在中间数组里面找不到就push进去:

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

 var flag = false;

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

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

      flag = true;

break; 

  }; 

 }  

if(!flag){ 

     tempArr.push(arr[i]); 

 };

}
复制代码

通过对象属性不能重复特点,当没有这个属性的时候就push进去,切这个对象也要添加这个下标属性:

var obj = {};

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

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

       obj[arr[i]] = true;     

   tempArr.push(arr[i]); 

   }

}

console.log(tempArr);//["a", 8, 10, "d", 20, "f"]

 

ES6set和from:

console.log(Array.from(new Set(arr)));//["a", 8, 10, "d", 20, "f"]
复制代码

其实数组去重的方法原理都是利用中间数组去比较,不管用includes还是indexOf,原理都是一样的。还有用其他遍历函数的方法,比如map、filter等,也能实现,但是原理都一样。

Coding 个人笔记

转载于:https://juejin.im/post/5c9acf22f265da60fb3bfe43

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值