• 记录数组去重的几种方法


    1、双层循环去重

    先定义原始数组第一个元素的数组,遍历原始数组,新数组与原始数组进行比较
    如果不重复就添加到新数组中,最后返回新数组res

     let arr = [0,2,3,4,4,0,2];
       function unique1(ary) {
        let res = [ary[0]];
        for(let i=0;i<ary.length;i++){
            let flag = true;
            for(let j=0;j<res.length;j++){
                if(arr[i] === res[j]){
                    flag = false;
                    break;
                }
            }
            if(flag)res.push(arr[i]);
        }
        return res;
        
       }
       console.log(unique1(arr));
       //[0, 2, 3, 4]

    2、使用indexOf方法去重

    indexOf()方法可返回某个指定的元素在数组中首次出现的位置
    首先定义一个空数组res,然后调用indexOf方法对原来的数组进行遍历判断,
    如果元素不在res中,则将其push进res中,最后将res返回即可获得去重的数组

       let bosh = [1,2,3,3,2,1,1,2,3,4,5,6,7];
        function unique2(a){
            let temp = [];
            for(let i=0;i<a.length;i++){
                //如果没有找到首次出现的位置代表这个数不重复
                if(temp.indexOf(a[i]) === -1){
                    temp.push(a[i]);
                }
            }
            return temp;
        }
        console.log(unique2(bosh));
        // [1, 2, 3, 4, 5, 6, 7]

    3、相邻元素去重(排序后去重)

    首先调用了数组的排序方法sort(),然后根据排序后的结果进行遍历及相邻元素对比
    如果相等则跳过改元素,直到遍历结束

      let adjoin = [64,5,4,2,4,5,2];
        function unique3(arr){
            arr = arr.sort();
            let empt = [];
            for(let i=0;i<arr.length;i++){
                if(arr[i] !== arr[i-1]){
                    empt.push(arr[i]);
                }
            }
            return empt;
        }
        console.log(unique3(adjoin));
        //[2, 4, 5, 64]

    4、利用对象属性去重

    创建空对象,遍历数组,将数组中的值设为对象的属性,并给该属性赋初始值1,每出现一次,对应的属性值增加1
    这样,属性值对应的就是该元素出现的次数

     let sz = [6,20,0,20,9,6,0];
       function unique4(arr){
        let item = [];
        let obj = {};
        for(let i=0;i<arr.length;i++){
            if(!obj[arr[i]]){
                item.push(arr[i]);
                obj[arr[i]] = 1;
            }else{
                obj[arr[i]]++;
            }
        }
        return item;
       }
       console.log(unique4(sz));
     //[6, 20, 0, 9]

    5、利用indexOf + filter

    利用indexOf检测元素在数组中第一次出现的位置是否和元素现在的位置相等,如果不等则说明该元素是重复元素,然后把重复的元素过滤掉

      let filt = [0,99,33,22,0,44,33];
       function unique5(arr){
        return Array.prototype.filter.call(arr,function(item,index){
            return arr.indexOf(item) === index;
        });
       }
       console.log(unique5(filt));
       //[0, 99, 33, 22, 44]

    6、使用es6中set与解构赋值去重

    set的特性就是值是唯一的,不能重复

       let es = [1,2,2,3,4,1,3,5];
        function unique6(arr){
            return [...new Set(arr)]
        }
        console.log(unique6(es));
        //[1, 2, 3, 4, 5]

    7、使用es6中set与Array.from去重

    Array.from可以将类数组转为数组

      let array = [0,3,0,5,0,6,5];
        function unique7(arr){
            return Array.from(new Set(arr))
        }
        console.log(unique7(array));
        //[0, 3, 5, 6]
  • 相关阅读:
    Tensor总结
    Tensorflow池化
    conda操作
    KS值计算
    supervisor实践
    npm/yarn实践
    nni 环境搭建
    阿里云个人邮箱配置
    Jinja2宏使用
    利用VS code 远程调试 docker 中的 dotnet 应用
  • 原文地址:https://www.cnblogs.com/theblogs/p/10640236.html
Copyright © 2020-2023  润新知