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

    1. 双循环去重

    var arr = [3, 6, 8, 9, 7, 4, 4, 7, 9, 8, 6, 3];
    // 双循环去重
    function clearRepeat(arr) {
        for (let i = 0; i < arr.length; i++) {
            let cur = arr[i]
            for (let j = i + 1; j < arr.length; j++) {
                if (cur == arr[j]) {
                    arr.splice(j, 1);
                    j--
                }
            }
        }
        return arr;
    }
    let res = clearRepeat(arr);
    console.log(res);

    2.递归去重

    var arr = [3, 6, 8, 9, 7, 4, 4, 7, 9, 8, 6, 3];
    // 递归去重
    function toolFn(arr) {
        let ary = arr;
        let len = arr.length;
        ary.sort((a, b) => a - b);
    
        function clearRepeatDG(index) {
            if (index >= 1) {
                if (ary[index] === ary[index - 1]) {
                    ary.splice(index, 1)
                }
                clearRepeatDG(--index)
            }
        }
        clearRepeatDG(len - 1);
        return ary;
    }
    let resDG = toolFn(arr);
    console.log(resDG);

    方法2:

    var arr = [1, 2, 3, 4, 5, 5, 4, 3, 2, 1, 0, 0, 1];
    function outerFn(arr) {
      let newArr = [];
      let len = arr.length - 1;
      function fn(len) {
        if (len === 0) return;
        if (newArr.indexOf(arr[len]) === -1) {
          newArr.push(arr[len]);
        }
        fn(--len);
      }
      fn(len);
      return newArr;
    }
    
    var res = outerFn(arr);
    console.log(res);

     3.利用对象的key具有唯一性去重

    var arr = [3, 6, 8, 9, 7, 4, 4, 7, 9, 8, 6, 3];
    // 利用对象的key具有唯一性去重
    function useObjectFn(arr) {
        let obj = {};
        let newArr = [];
        for (let i = 0; i < arr.length; i++) {
            let cur = arr[i];
            obj[cur] = arr[i]
        }
        for (let key in obj) {
            newArr.push(obj[key])
        }
        return newArr;
    }
    let resObj = useObjectFn(arr);
    console.log(resObj);
    var arr = [3, 6, 8, 9, 7, 4, 4, 7, 9, 8, 6, 3];
    // 常规写法
    function useObjectFn2(arr) {
        let obj = {};
        for (let i = 0; i < arr.length; i++) {
            let cur = arr[i];
            if (obj[cur] === cur) {
                arr.splice(i, 1);
                i--;
                continue;
            }
            obj[cur] = cur;
        }
        return arr
    }
    let resObj2 = useObjectFn2(arr);
    console.log(resObj2);
  • 相关阅读:
    RecyclerView中装饰者模式应用
    Android中的Drawable和动画
    Android的线程和线程池
    Bitmap的加载和Cache
    Android的消息机制
    【Java基础】线程和并发机制
    Asp.Net 将HTML中通过dom-to-image.js标签div内的内容转化为图片保存到本地
    Asp.Net MVC @Html.TextBox 只允许输入数字问题
    程序员编程10大原则,请牢牢记住
    Asp.Net MVC WebAPI的创建与前台Jquery ajax后台HttpClient调用详解
  • 原文地址:https://www.cnblogs.com/haoqiyouyu/p/14902712.html
Copyright © 2011-2022 走看看