美文网首页
JS 中常见的几种去重方法

JS 中常见的几种去重方法

作者: 酷酷的凯先生 | 来源:发表于2021-07-07 16:27 被阅读0次

    # 1. ES6 语法 new Set() 方法去重

    ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
    Set 本身是一个构造函数,用来生成 Set 数据结构。
    利用的算法类似 '===',与 '===' 的区别是 ‘===’ 认为 NaN != NaNset 的算法认为它们是相等的。
    Set 不支持对象方法,认为对象都是不相等的。

    let arr = new Set( [1,2,2,3,3,4,5,6]);
    let newArr = Array.from(arr);
    console.log(newArr); // [1,2,3,4,5,6]
    console.log([...arr ]); // [1,2,3,4,5,6]
    

    # 2. 使用 splice方法嵌套双重 for 循环去重(ES5常用)

    原理:splice 会改变原数组

    function unique(){
        for(let i = 0; i < arr.length; i++){
            for(let j = i+1; j < arr.length; j++){
                if(arr[i] === arr[j]){
                    arr.splice(j, 1);
                    j--;
                }
            }
        }
        return arr;
    }
    

    # 3. 利用 indexof / includes 与 forEach 去重

    function unique(arr){
        let _arr = [];
        arr.forEach((item, index)=>{
            if( _arr.indexOf(arr[index]) === -1) // 或者 if( !_arr.includes(arr[index]) ) 
                _arr.push(arr[index]);
        })
    
        return _arr;
    }
    

    # 4. 利用数组的 filter 方法去重

    filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素
    indexOf ( searchvalue, fromindex )
    searchvalue:必填值,规定需检索的字符串值
    fromindex:选填值,规定在字符串中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。
    如省略该参数,则将从字符串的首字符开始检索。

    function unique(arr){
        let _arr = arr.filter((item, index)=>{
            // 如果新数组的当前元素的索引值 == 该元素在原始数组中的第一个索引,则返回当前元素
            return arr.indexOf(item, 0) === index;
        });
    
        return _arr;
    }
    

    # 5. 利用数组的 sort() 方法去重

    原理:相邻元素对比法,若相等则去掉一个
    注:array.sort( function ) 参数必须是函数,可选,默认升

    function unique(arr){
        arr = arr.sort()
        let _arr = [];
    
        for(let i = 0; i < arr.length; i++){
            if(arr[i] !== arr[i+1])
                _arr.push( arr[i] )
        }
        return _arr;
    }
    

    # 6. 利用 函数递归 结合 sort 和 splice 去重

    function unique(arr){
        arr = arr.sort();
        
        let fn = (index)=>{
            if( index >=1 ){
                if(arr[index] === arr[index - 1])
                    arr.splice(index, 1);
                
                fn(index - 1);
            }
        }
        fn(arr.length-1);
    
        return arr;
    }
    

    # 7. 利用 reduce 结合 includes 去重

    function unique(arr){
      return arr.reduce((prev, cur)=>{
        return prev.includes(cur) ? prev : [...prev, cur]
      }, [])
    }
    

    # 8. 利用 Map数据结构 去重

    function unique(arr){
        let map = new Map(), _arr = [];
        for(let i = 0; i < arr.length; i++){
            if(!map.has(arr[i])){
                map.set(arr[i], true)
                 _arr.push(arr[i])
            }
        }
        return _arr;
    }
    
    

    相关文章

      网友评论

          本文标题:JS 中常见的几种去重方法

          本文链接:https://www.haomeiwen.com/subject/sczoultx.html