数组去重的方法

前言

对数组arr = [1,2,3,1,2,4,2,1,3,5,3,6]去重,得到数组arrNew = [1,2,3,4,5,6]

1、双重for循环

创建一个新数组arrNew,将arr中的每一个元素与arrNew中的元素进行比较,如果不相同就用push()方法添加到arrNew,相同则不添加

<script>
  var arr=[1,2,3,1,2,4,2,1,3,5,3,6]
  function unique(arr){
    // 创建一个新的空数组
    var arrNew = [];
    // 遍历原数组
    for(var i = 0; i < arr.length; i ++){
      // 设置一个标识变量,默认为true,代表新数组没有与原数组相同的元素
      var flag = true;
      // 遍历新数组
      for(var j = 0; j < arrNew.length; j ++){
        // 与原数组比较,如果一致则标识变为false,代表新数组已经包含该元素
        arr[i] === arrNew[j] ? flag = false : flag
      }
      if(flag){
        // flag = true,将原数组的元素加进新数组
        arrNew.push(arr[i])
      }
    }
    return arrNew;
  }
  console.log(unique(arr));
</script>

2、利用indexOf()方法

indexOf() 查询索引,从前往后,获取第一个元素的索引, 如果没有该元素则返回-1

<script>
  var arr=[1,2,3,1,2,4,2,1,3,5,3,6]
  function unique(arr){
    // 创建一个新的空数组
    var arrNew = [];
    // 遍历原数组
    for(var i = 0; i < arr.length; i ++){
      // 如果新数组没有原数组中的该元素
      if(arrNew.indexOf(arr[i]) == -1){
        // 添加进新数组
        arrNew.push(arr[i])
      }
    }
    return arrNew;
  }
  console.log(unique(arr));
</script>

3、利用splice()方法

splice(start,length) start是索引,lenght是个数,从start截取lenght个元素,包括start,返回一个新数组,会改变原来数组大小

<script>
  var arr=[1,2,3,1,2,4,2,1,3,5,3,6]
  function unique(arr){
    // 遍历原数组
    for(var i = 0; i < arr.length; i ++){
      // 每一个元素与后边的元素比较
      for(var j = i+1; j < arr.length; j ++){
        if(arr[i] === arr[j]){    //第一个元素等于第二个元素
          arr.splice(j,1);     //删除第二个元素
          j --;
        }
      }
    }
    return arr;
  }
  console.log(unique(arr));
</script>

4、利用filter()方法

filter(function(value,index){}) 过滤数组中的元素

<script>
  var arr=[1,2,3,1,2,4,2,1,3,5,3,6]
  function unique(arr){
    // 创建新的空数组
    var arrNew = [];
    // 过滤原数组中的元素
    arr.filter(function(value,index){
      if(arrNew.indexOf(value) == -1){
        arrNew.push(value);
      }
    })
    return arrNew;
  }
  console.log(unique(arr));
</script>

5、利用对象的特点

利用对象属性不能重复的特性给数组去重,将数组中的元素当做对象的属性名(属性名不会重复),再将新对象中的属性当做新数组的元素

  <script>
    var arr = [1, 2, 3, 1, 2, 4, 2, 1, 3, 5, 3, 6];
    function unique(arr) {
      // 创建新的空数组
      var arrNew = [];
      // 创建一个新对象
      var obj = {};
      // 遍历原数组
      for (var i = 0; i < arr.length; i++) {
        obj[arr[i]] = arr[i]; //将元素当做对象的属性名,属性值也是元素
      } 
      // 遍历对象
      for (x in obj) {
        arrNew.push(Number(x));    //将对象的属性名添加到新数组
      }
      return arrNew;
    }
    console.log(unique(arr));
  </script>

6、利用Set

Set结构的成员不能重复

 <script>
    var arr = [1, 2, 3, 1, 2, 4, 2, 1, 3, 5, 3, 6];
    // 将数组作为参数,set结构中数据不可以重复,得到的set内没有重复数据
    var set = new Set(arr);
    //将set转为数组
    var arrNew = Array.from(set);
    console.log(arrNew); 
  </script>

7、利用Map

has(key) 判断Map实例内是否含有指定的键值对

  <script>
    var arr = [1, 2, 3, 1, 2, 4, 2, 1, 3, 5, 3, 6];
    function unique(arr){
      // 创建一个新的空数组
      var arrNew = [];
      // 创建一个map
      var map = new Map();
      // 遍历原数组
      for(var i = 0; i < arr.length; i ++){
        // 判断map中是否含有指定的键值对,原数组元素为键
        if(!map.has(arr[i])){   //没有
          map.set(arr[i],1);   //添加到map中
          arrNew.push(arr[i])   //添加到新数组红
        }
      }
      return arrNew;
    }
    console.log(unique(arr));
  </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值