js数组:数组去重

本文介绍了在JavaScript中去除数组重复元素的三种方法:暴力法、排序法和Set迭代器法。暴力法通过双重循环实现,通用但效率较低;排序法通过排序后去重,效率高但对引用值对象无效;Set迭代器法简洁快速,但部分老浏览器可能不支持ES6特性。
摘要由CSDN通过智能技术生成

三种要去重的数组类型

var obj1 = {
    ky: 0
  };
  var obj2 = {};
  var obj3 = {};
  //arr1:全引用型
  var arr1 = [obj1, obj2, obj3, obj2, obj1, obj1, obj2, obj3, obj2, obj1];
  //arr2:普通型
  var arr2 = [1, 2, 3, 2, 1, 1, 2];
  //arr3,引用型但json后可以区分
  var arr2 = [obj1, obj2, obj2, obj1, obj1, obj2, obj2, obj1];

1.暴力法:

双重循环+splice(index,1)

  • 优点:适用于数组里面的任何情况;
  • 缺点:效率低。
  function distinct(arr) {
    var newArr=arr.slice(0);
    for (var index = 0; index < newArr.length; index++) {
      var item = newArr[index];
      for (var i = index + 1; i < newArr.length; i++) {
        if (item == newArr[i]) {
          newArr.splice(i, 1);
          i--;
        }
      }
    }
    return newArr;
  }

2.排序法:先排序,再去重

reduce()/滑动窗口

  • 优点:效率高;
  • 缺点:对于引用值对象无法排序,进而无法出重(arr1,arr3要修改isSame)
 function distinct(arr) {
  return arr.sort().reduce((init, current) => {
    if (init.length === 0 || isSame(init[init.length - 1], current)) {
      init.push(current);
    }
    return init;
  }, []);
  //可以自定义相同标准
  function isSame(a, b) { 
    if (a !== b) {
      return true;
    }
  }
}

3.set迭代器:运用set迭代器排序

  • 优点:简单,快捷,全支持;
  • 缺点:部分浏览器不支持es6迭代器
  var newArr = [...new Set(arr)]; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

松果Tech

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

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

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

打赏作者

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

抵扣说明:

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

余额充值