数组去重常用的六种方法

一、定义一个新数组,并存放原数组的第一个元素,然后将元素组一一和新数组的元素对比,若不同则存放再新数组中

    var arrOld = [2, 3, 5, 4, 3, 2, 6, 8, 5, 4, 6, 2]
    var arrNew = []
    var flag = true //假设新数组中没有相同的元素
    for (var i = 0; i < arrOld.length; i++) {
      flag = true
      for (var j = 0; j < arrNew.length; j++) {
        if (arrNew[j] == arrOld[i]) {
          flag = false
        }
      }
      if (flag) {
        arrNew.push(arrOld[i])
      }
    }
    console.log(arrNew)//[2, 3, 5, 4, 6, 8]

二、利用对象属性不能重复的特性给数组去重,如果没有该属性则存入新数组

  var arrOld=[2,3,5,4,3,2,6,8,5,4,6,2]
  var arrNew=[]
  var newObject={} 
  for(var i=0;i<arrOld.length;i++){
    newObject[arrOld[i]]='a'
  }
  for (x in newObject){
    arrNew.push(Number(x));
  }
  console.log(arrNew)//[2, 3, 4, 5, 6, 8]

三、利用数组的indexOf下标属性来查询

    var arr = [2, 5, 8, 2, 5, 6, 2, 6, 4, 1, 5];
    function fn1(arr) {
      var newArr = [];
      for (var i = 0; i < arr.length; i++) {
        if (newArr.indexOf(arr[i]) === -1) {
          newArr.push(arr[i]);
        }
      }
      return newArr;
    }
    console.log(fn1(arr)); //[2, 5, 8, 6, 4, 1]

四、利用数组的includes方法

includes()方法:用来判断一个数组是否包含一个指定的值,如果包含返回true,不包含返回false

    var arr = [2, 5, 8, 2, 5, 6, 2, 6, 4, 1, 5];
    function fn1(arr) {
      var newArr = [];
      for (var i = 0; i < arr.length; i++) {
        if (!newArr.includes(arr[i])) {
          newArr.push(arr[i]);
        }
      }
      return newArr;
    }
    console.log(fn1(arr)); //[2, 5, 8, 6, 4, 1]

五、利用ES6的set方法

    let arr = [2, 3, 5, 6, 4, 1, 3, 1, 4, 7, 5, 2, 3, 4, 6, 1, 2, 3]
    let setArr = new Set(arr)
    let arrNew = Array.from(setArr)
    console.log(arrNew)//[2, 3, 5, 6, 4, 1, 7]

六、利用splice方法

 通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。

    let arr = [12, 1, 12, 3, 1, 88, 66, 9, 66];
    function fn1(arr) {
      for (let i = 0; i < arr.length; i++) {
        for (j = i + 1; j < arr.length; j++) {
          if (arr[i] === arr[j]) {
            arr.splice(j, 1);
            j--;
          }
        }
      }
      return arr;
    }
    console.log(fn1(arr));//[12, 1, 3, 88, 66, 9]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值