数组去重几种方法哪个效率高

按照效率低到高

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

  2. for  和 while

    function uniq6(arr){
        if(arr === null || arr.length < 2){
            return arr
        };
        let res = [], exits =[];
        for (let i = 0 ,len = arr.length;i<len;i++){
            let j = arr[i];
            while( !exits[j]){
                res.push(arr[i]);
                exits[j]=true;
            }
        }
        return res;
    }

  3. ES6 的 filter()方法

    function uniq2(arr){
        return arr.filter((item,index)=>{
            return arr.indexOf(item) === index
        })
    }
  4. for ... of 

    function uniq3(arr){
        let result = [];
        for (let i of arr){
            !result.includes(i) && result.push(i);
        } 
        return result
    }
  5. sort方法

    function uniq4(arr){
        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
    }
  6. hash

    function unique3(arr){
    	for (var i =0,hash=[];i<arr.length ;i++ ){
    		if (hash[arr[i]]==undefined){
    		hash[arr[i]]=1;
    		} 
    	}
    	var j=0;
    	var keys=[];
    	for (keys[i++] in hash );
    	return keys;
    }
    console.log( unique3(arr) );

  7. Es6 的 set方法

    function uniq5(arr){
        return Array.from(new Set([arr]))
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值