数组去重基于对象健值

var ary = [1,2,3,2,4,5,6,5,6,6,6,4,3];
/**
 * 基于对象的属性名不能重复,我们实现高性能的数组去重
 * 1.创建一个空对象
 * 2.一次遍历数组中的每一项,把每一项存储的值,当做对象的属性名和属性值存储起来
 * 第一次循环 1 {1:1}
 * 第二次循环 2 {1:1,2:2}
 * 第三次循环 3 {1:1,2:2,3:3}
 * 第四次循环 2 我们在存储之前做一个判断,判断当前对象中是否存在这个属性,如果存在,说明之前这一项
 * 存储的操作,进一步说明之前数组中出现过这个数值(也就是重复了,此时我们把当前项在数组中移除即可)
 *
 *
 * 如何判断对象中是否存在这个属性,如果没有这个属性,值是undefined
 */
var obj= {};
for (var i = 0; i < ary.length; i++) {
    var item = ary[i];//  每一次循环从数组中拿出来的这一项
    //存储之前需要做判断:如果对象中已经存在这个属性 说明当前 itme 在之前出现过,也就是当前重复了,我们就把当前项删除
    if (typeof obj[item] !=='undefined') {
       /* ary.splice(i,1);
        i--;//防止数组塌陷
        这种方式消耗性能
        1,我们把数组最后一项的结果获取到,替换当前项内容
        2,在把数组最后一项删除
        */
        //优化版
        ary [i] = ary[ary.length-1];
        ary.length--;
        i--;
        continue;

    }
    //把这一项作为对象的属性名和属性值存储进去
    obj [item]= item;

}
console.log(ary);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值