三种 简单的数组去重 (前两种不改变原有数组!

1.对象键值对处理(推荐)

Array.prototype.myUnique = function () {
    let _this =[...this],
         obj = {};
     for (let i = 0; i<_this.length;i++) {
         let item = _this[i];
         if(typeof obj[item] !== 'undefined') {
             //当前这一项再数组中已经存在,我们把这一项在数组中干掉
            _this[i] = _this[_this.length - 1];
            _this.length --;
            i--;
            continue;
         }
         obj[item] = true;
     }
     obj = null;
    return _this;
};
let ary = [1,2,3,4,2,1,23,4,4,3,5,2,1,2,3];
let uniqueAry = ary.myUnique();
console.log(uniqueAry);

2.排序后相邻去除法

 把数组进行排序 ,验证当前项和后一项是否相同,如果不相同,说明没有重复,我们把相同项提取出来保存即可。

Array.prototype.myUnique = function () {
   let _this =[],
      ary = this.slice(0).sort((a,b) => a - b);
for (let i = 0; i<ary.length;i++) {
     let item = ary[i],
        next = ary[i + 1];
    if (item !==next ) {
        _this.push(item);
    }
}
return _this;
};
let ary = [1,2,3,4,2,1,23,4,4,3,5,2,1,2,3];
let uniqueAry = ary.myUnique();
console.log(uniqueAry);

3.indexOf 获取当前项在数组中第一次出现位置的索引 (此方法不兼容IE6~8)

依次迭代数组中的每一项,验证当前项在数组中是否存在(不是和整个数组比较是否存在,而是和当前项的后面比较是否存在

Array.prototype.myUnique = function () {
let _this = [...this]
//依次迭代数组种的每一项,验证当前在数组中是否存在
for (let i = 0; i<_this.length;i++) {
     let item = _this[i],
         nextAry = _this.slice(i + 1);
    if (nextAry.indexOf(item) >-1 ) {
        _this[i] = _this[_this.length-1];
        _this.length--;
        i--;
    }
}
 return _this;
};
let ary = [1,2,3,4,2,1,23,4,4,3,5,2,1,2,3];
let uniqueAry = ary.myUnique();
console.log(uniqueAry);//[ 5, 23, 3, 4, 2, 1 ]

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值