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

    1、
    一、利用ES6 Set去重(ES6中最常用)

    var arr = [1,1,8,8,12,12,15,15,16,16];
    function unique (arr) {
      return Array.from(new Set(arr))
    }
    
    console.log(unique(arr))
     //[1,8,12,15,16]
    // 不考虑兼容性,这种去重的方法代码最少。这种方法还无法去掉“{}”空对象,后面的高阶方法会添加去掉重复“{}”的方法。
    

    二、利用for嵌套for,然后splice去重(ES5中最常用)

    var arr = [1, 1, 8, 8, 12, 12, 15, 15, 16, 16];
    
    function unlink(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(unlink(arr));
    //NaN和{}没有去重,两个null直接消失了
    //双层循环,外层循环元素,内层循环时比较值。值相同时,则删去这个值。
    

    3、利用indexOf去重

    var arr = [1, 1, 8, 8, 12, 12, 15, 15, 16, 16];
    function unlink(arr) {
        if (!Array.isArray(arr)) {
            console.log('错误!')
            return
        }
        var array = [];
        for (var i = 0; i < arr.length; i++) {    // 首次遍历数组
            if (array.indexOf(arr[i]) === -1) {   // 判断索引有没有等于
                array.push(arr[i])
            }
        }
        return array
    }
    console.log(unlink(arr));
    //NaN、{}没有去重
    //新建一个空的结果数组,for 循环原数组,判断结果数组是否存在当前元素,如果有相同的值则跳过,不相同则push进数组。
    

    4、利用includes

    var arr = [1, 1, 8, 8, 12, 12, 15, 15, 16, 16];
    function unique(arr) {
        if (!Array.isArray(arr)) {
            console.log('type error!')
            return
        }
        var array =[];
        for(var i = 0; i < arr.length; i++) {
                if( !array.includes( arr[i]) ) {//includes 检测数组是否有某个值
                        array.push(arr[i]);
                  }
        }
        return array
    }
    console.log(unique(arr))
    

    5、利用filter

    var arr = [1, 1, 8, 8, 12, 12, 15, 15, 16, 16];
    function unlink(arr) {
        return arr.filter(function (item, index, arr) {
            //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素
            return arr.indexOf(item, 0) === index;
        });
    }
    console.log(unlink(arr));
    
    // element过滤时去重
    aaa(){
          this.tableData.forEach(ele=>{
            this.filtersDate.push({
              text:ele.YDay,
              value:ele.YDay
            })
          this.filtersDate = this.uniqArrObject(this.filtersDate)
          })
    }
    uniqArrObject (arr) {
      let result = {}
      let finalResult = []
      for (let i = 0; i < arr.length; i++) {
           result[arr[i].text] = arr[i]
      }
      for (let key in result) {
           finalResult.push(result[key])
      }
      return finalResult
     },
    
  • 相关阅读:
    leetcode643.滑动窗口例题
    BZOJ4195 离散化+并查集
    luogu线性表刷题
    2021-5-29 周报博客
    2021-5-28 日报博客
    2021-5-27 日报博客
    2021-5-26 日报博客
    2021-5-25 日报博客
    2021-5-24 日报博客
    梦断代码阅读笔记之二
  • 原文地址:https://www.cnblogs.com/axingya/p/14506669.html
Copyright © 2011-2022 走看看