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

    第一种:用indexOf方法

    这种方法最简单最直观,也最容易理解,代码如下:

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

    这种方法很好理解,利用了indexOf()方法(indexOf()方法如果查询到则返回查询到的第一个结果在数组中的索引,如果查询不到则返回-1)。先创建一个新的空数组用来存储新的去重的数组,然后遍历arr数组,在遍历过程中,分别判断newArr数组里面是不是有遍历到的arr中的元素,如果没有,直接添加进newArr中,如果已经有了(重复),那么不操作,那么从头到尾遍历一遍,正好达到了去重的目的。

    第二种:双重for循环用splice方法删除

    两次for循环删除所有后序重复的元素

    例如: 1 1 1 3 2 1 2 4 

     1 function noRepeat1(arr){
     2         // 第一层for用来控制循环的次数
     3         for(var i=0; i<arr.length; i++){
     4             //第二层for 用于控制与第一层比较的元素
     5             for(var j=i+1; j<arr.length; j++){
     6                 //如果相等
     7                 if(arr[i] == arr[j]){
     8                     //删除后面的 即第 j个位置上的元素  删除个数 1 个
     9                     arr.splice(j,1);
    10                     // j--很关键的一步  如果删除 程序就会出错 
    11                     //j--的原因是 每次使用splice删除元素时 返回的是一个新的数组 
    12                     // 这意味这数组下次遍历是 比较市跳过了一个元素
    13                     /*
    14                         例如: 第一次删除后 返回的是 1 1 3 2 1 2 4
    15                      *  但是第二次遍历是 j的值为2  arr[2] = 3
    16                      *  相当于跳过一个元素 因此要 j--
    17                      * */
    18                     j--;
    19  
    20                 }
    21  
    22             }
    23         }
    24  
    25         return arr;
    26 }

    第三种:排序后相邻去除,用sort方法

    1 var arr = [2, 8, 5, 0, 5, 2, 6, 7, 2]
    2 arr.sort()
    3 var newArr = [arr[0]]
    4 for (var i = 1; i < arr.length; i++) {
    5     if (arr[i] !== newArr[newArr.length - 1]) {
    6          newArr.push(arr[i])
    7     }
    8 }
    9 console.log(newArr) // 结果:[0, 2, 5, 6, 7, 8]

    这种方法的思路是:先用sort()方法把arr排序,那么排完序后,相同的一定是挨在一起的,把它去掉就好了,首先给新数组初始化一个arr[0],因为我们要用它和arr数组进行比较,所以,for循环里面i也是从1开始了,我们让遍历到的arr中的值和新数组最后一位进行比较,如果相等,则pass掉,不相等的,push进来,因为数组重新排序了,重复的都挨在一起,那么这就保证了重复的这几个值只有第一个会被push进来,其余的都和新数组的被push进来的这个元素相等,会被pass掉,也达到了去重的效果。

     ———————————————————————————————

    参考文章:

    https://www.cnblogs.com/silentmuh/p/13066408.html

    https://blog.csdn.net/qq_42489540/article/details/81671312

  • 相关阅读:
    配置 Sublime Text 用 Node.js 执行 JavaScript 程序
    KNN算法
    堆排序(heap sort)
    复原二叉树
    二叉树的广度优先遍历(层次遍历)
    二叉树(BT)相关
    BST(二叉搜索树)相关
    二叉树遍历(先序、中序、后序)
    排序算法
    查找算法
  • 原文地址:https://www.cnblogs.com/oaoa/p/14679316.html
Copyright © 2011-2022 走看看