zoukankan      html  css  js  c++  java
  • 数组去重

    1、for循环遍历去重

     1   <script>
     2     // 重复的元素只保留一个
     3     var arr = [4,2,5,7,2,6,2,6,6,5]
     4     console.log(arr)
     5     // 使用循环依次比较,遇到重复的就删除
     6     // 比较length-1趟
     7     for (var i = 0; i < arr.length - 1; i++) {
     8       // 当前这一趟比较从i+1开始
     9       // 比较的终点length-1
    10       for (var j = i+1; j < arr.length; j++) {
    11         if (arr[i] === arr[j]) {
    12           arr.splice(j, 1)
    13           // 删完以后j-1抵消for里的++确保不跳过重复的值
    14           j--
    15         }
    16       }
    17     }
    18     console.log(arr)
    19   </script>

    2,、forEach遍历去重

     1   <script>
     2     var arr = [4,2,4,5,7,2,6,2,6,6,5]
     3     // 利用对象的属性名不冲突完成去重
     4     // 可以把数字作为对象的属性名
     5     // var obj = {
     6     //   4: 'lisi'
     7     // }
     8     // console.log(obj[4])
     9 
    10     // 遍历数组,判断当前数组元素作为对象属性名是否能取到值
    11     // 如果取不到,说明这是第一次遍历到当前值,就把当前元素作为对象属性名赋个值
    12     // 如果取到了,说明之前已经赋过值了,也就是说当前值不是第一次出现
    13 
    14     var obj = {}
    15     var arr1 = []
    16     arr.forEach(function (item) {
    17       // 把item作为属性名到对象里去取值看能不能取到
    18       if (obj[item]) {
    19         // 取到值了,说明item不是第一次出现,item是一个无效值,就不用push到arr1里,这里就什么都不用做
    20       } else {
    21         // 取不到值,说明item是第一次出现
    22         // 就给他赋个值
    23         // item是第一次出现,他是我们要保留的值
    24         obj[item] = true
    25         arr1.push(item)
    26       }
    27     })
    28 
    29     // arr.forEach(function (item) {
    30     //   // 把item作为属性名到对象里去取值看能不能取到
    31     //   if (!obj[item]) {
    32     //     // 取不到值,说明item是第一次出现
    33     //     // 就给他赋个值
    34     //     obj[item] = 'a'
    35     //     arr1.push(item)
    36         
    37     //   } 
    38     //   // else 就不用写了
    39     //   // else {
    40     //   //   // 取到值了,说明item不是第一次出现
    41     //   // }
    42     // })
    43 
    44     console.log(arr1)
    45   </script>

    3、Set 强制去重

    1   <script>
    2     var arr = [4,2,4,5,7,2,6,2,6,6,5]
    3 
    4     // ES6的写法,把数组写成Set,Set是Es6新增的数据类型,默认不允许重复的
    5     // 但是把数组变成Set了,再使用Array.from重新转换成数组,就可以了
    6 
    7     var arr1 = Array.from(new Set(arr))
    8     console.log(arr1)
    9   </script>
  • 相关阅读:
    哈希冲突详解(拉链法,开放地址法)
    哈希冲突详解(拉链法,开放地址法)
    排序算法
    排序算法
    加分二叉树
    加分二叉树
    动态规划
    动态规划
    动态规划
    动态规划
  • 原文地址:https://www.cnblogs.com/strongerPian/p/12686696.html
Copyright © 2011-2022 走看看