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

    1 双重for循环

    function distinct(value) {
            let arr = value;
            for (let i=0, len=arr.length; i<len; i++) {
                for (let j=i+1; j<len; j++) {
                    if (arr[i] == arr[j]) {
                        arr.splice(j, 1);
                        // splice 会改变数组长度,所以要将数组长度 len 和下标 j 减一
                        len--;
                        j--;
                    }
                }
            }
            return arr
        }
        var arrlist = [1, 3, 5, 3, 5, 6, 7]
        var dealArr = distinct(arrlist)
        console.log(dealArr)  // 此性能最差   

    2  Array.filter() + indexOf

     function distinct(value) {
          let arr = value;
          return arr.filter((item, index)=> {
            return arr.indexOf(item) === index
          })
        }
        var arrlist = ['ab', 'cd', 'ab', 6, 5, 6, 7]
        var dealArr = distinct(arrlist)
        console.log(dealArr)  // 此性能较差 

    3 ES6 Set

    var arr = [1, 2, 4, 4, 6, 6, 8]
        let tempArr = new Set(arr)
        let dealArr = Array.from(tempArr)
        console.log(dealArr) // 性能优

    4 Array.sort()

     function distinct(value) {
            let arr = value
            arr = arr.sort()
            let result = [arr[0]]
    
            for (let i=1, len=arr.length; i<len; i++) {
                arr[i] !== arr[i-1] && result.push(arr[i])
            }
            return result
        }
        var arrlist = ['ab', 'cd', 'ab', 6, 5, 6, 7]
        var dealArr = distinct(arrlist)
        console.log(dealArr)  // 此性能比较优秀 

    5 for...of + Object

    function distinct(value) {  // 利用对象的属性不会重复这一特性,校验数组元素是否重复
            let arr = value
            let result = []
            let obj = {}
    
            for (let i of arr) {
                if (!obj[i]) {
                    result.push(i)
                    obj[i] = 1
                }
            }
    
            return result
        }
        var arrlist = ['ab', 'cd', 'ab', 6, 5, 6, 7]
        var dealArr = distinct(arrlist)
        console.log(dealArr)  // 此性能最优 
  • 相关阅读:
    P7003 [NEERC2013]Hack Protection
    P6753 [BalticOI 2013 Day1] Ball Machine
    笛卡尔树-P2659 美丽的序列
    [省选联考 2020 A/B 卷] 冰火战士
    CF1166E The LCMs Must be Large
    线段树标记永久化模板
    zoj 2112 单点修改的主席树(树状数组套主席树)
    poj 2104 无修改主席树
    python中map的排序以及取出map中取最大最小值
    python之禅
  • 原文地址:https://www.cnblogs.com/Tiboo/p/11846316.html
Copyright © 2011-2022 走看看