数组去重

数组去重后返回的新数组有两种创建方式:一种是新建一个空数组,将原数组的不重复元素依次放进去,依赖于数组的push();另一种是在原数组的基础上,删除重复元素,依赖于数组的splice()。这两种方式在以下方法中都是可行的。

  1. 遍历+includes()
    function unique(arr){
        var newArr = [];
        var len = arr.length;
        for(var i=0;i<len;i++){
            if(!newArr.includes(arr[i])){ 
                newArr.push(arr[i]);
            }
        }
        return newArr;
    }
  2. 遍历+filter()
    function unique(arr){
        return arr.filter(function(item,index){
            return arr.indexOf(item,0) == index;
        });
    }
  3. 遍历+indexOf()
    function unique(arr){
        var newArr = [];
        for(var i=0;i<arr.length;i++){
            if(arr.indexOf(arr[i]) == i){
                newArr.push(arr[i]);
            }
        }
        return newArr;
    }
    function unique(arr){
        var newArr = [];
        for(var i=0;i<arr.length;i++){
            if(newArr.indexOf(arr[i]) == -1){
                newArr.push(arr[i]);
            }
        }
        return newArr;
    }
  4. 双层遍历
    function unique(arr){
        var newArr = [];
        for(var i=0;i<arr.length;i++){
            for(var j=1;j<arr.length;j++){
                if(arr[i] === arr[j]){
                    ++i;
                }
            }
            newArr.push(arr[i]);
        }
        return newArr;
    }
  5. 排序+相邻去重
    function unique(arr){
        arr.sort();
        var newArr = [arr[0]];
        for(var i=1;i<arr.length;i++){
            if(arr[i] !== newArr[newArr.length-1]){
                newArr.push(arr[i]);
            }
        }
        return newArr;
    }
  6. 递归
    function unique(arr){
        var copyArr = arr;
        var len = copyArr.length;
        copyArr.sort((a,b)=>{
            return a-b;
        });
        function loop(index){
            if(index>0){
                if(copyArr[index] === copyArr[index-1]){
                    copyArr.splice(index,1);
                }
                loop(index-1);
            }
        }
        loop(len-1);
        return copyArr;
    }
  7. ES6:Set数据结构
    function unique(arr){
        return Array.from(new Set(arr));
    }
    
    //或者使用扩展符
    function unique(arr){
        return [...new Set(arr)];
    }
  8. ES6:Map数据结构
    function unique(arr){
        let map = new Map();
        let newArr = [];
        let len = arr.length;
        for(let i=0;i<len;i++){
            if(map.has(arr[i])){ //判断是否存在该key值
                map.set(arr[i],true);
            }
            else{
                map.set(arr[i],false);
                newArr.push(arr[i]);
            }
            return newArr;
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值