数组去重

第一种:时间复杂度为O(n^2)

function uniq(arr){
    var result = [];
    var flag = true;
    for(var i=0;i<arr.length;i++){
        for(var j=0;j<result.length;j++){
            if(arr[i]===result[j]){
                flag = false;
            }   
        }
        if(flag){
            result.push(arr[i]);
        }
    }
    return result;
}

第二种:indexOf()与filter结合使用,环境支持es5,时间复杂度为O(n)

function uniq(arr){
    return arr.filter(function(item,index,array){
        return array.indexOf(item) === index;
    });
}
uniq([1,2,1,1,4])
输出: [1, 2, 4]

第三种:先排序sort(),再filter,时间复杂度为O(n)

function sortAndUniq(arr){
    return arr.sort().filter(function(item,index,array){
        return item !== array[index+1];
    });
}
sortAndUniq([1,2,1,1,4])
输出: [1, 2, 4]

第四种: 借助对象,时间复杂度为O(n),但是没有区分类型,比如2和”2”

function uniq(arr){
    var result = [];
    var obj = {};
    for(var i=0;i<arr.length;i++){
        if(!obj[arr[i]]){
            result.push(arr[i]);
            obj[arr[i]] = 1;
        }
    }
    return result;
}
uniq([1,2,3,1])
// 输出[1,2,3]

第五种:set方法

new Set([1,2,1,1,5]);
输出:Set(3) {1, 2, 5}

 

posted @ 2018-07-21 14:50  蘩星靛点  阅读(133)  评论(0编辑  收藏  举报