JS实现数组去重的三种方法

let ary = [1,2,2,3,4,5,3,4,5,7,8,6,6,5,7];

  1. 传统方案:依次拿出数组中的每一项然后与后面的每一项进行比较,如果相同则删去

但这种方法对于数组很长的情况,要循环很多次

for(var i = 0; i < ary.length-1; i++){
    var item = ary[i];
    for(var j = i+1; j < ary.length; j++){
        if(item === ary[j]){
            ary.splice(j,1);
            j--;
        }
    }
}
console.log(ary);
  1. 基于对象的属性名不能重复来实现高性能的数组去重
    =>创建一个空对象,依次遍历数组中的每一项,把每一项存储的值当作对象的属性名和属性值存储起来,然后在存储前做一个判断,如果当前对象已经存在了这个属性名则把这一项移除
let obj = {};
for(var i = 0; i < ary.length; i++){
    let item = ary[i];
    if(typeof obj[item] !== 'undefined'){
        ary[i] = ary[ary.length-1];
        ary.length--;
        i--;
        continue;
    }
    obj[item] = item;
}
console.log(ary);
  1. 利用ES6中新的方法set
//Array.from() 方法从一个类似数组或可迭代对象中创建一个新的数组实例
let newAry = Array.from(new Set(ary));
console.log(newAry);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值