JS面试题之数组去重排序

数组去重排序:
1、排序 -> 遍历比较(冒泡)
2、数组元素转为对象属性(属性相同会覆盖)-> for in拿到属性放到数组 -> 排序
3、遍历 -> indexOf判断 -> 排序
4、set集合,特性:不能包含重复元素
    遍历添加set.add(); -> 扩展new Array(...set) -> 排序  // ... 扩展运算符
     简化:[ ... new Set(array)]
 
// 方法1
console.time('1');
{
    var arr=[];
    for(let i=0;i<10000;i++){
        arr.push(Math.floor(Math.random()*10 + 1));
    }
    var newArr = arr.sort((a,b)=>(a-b));
    for(let i=0; i<newArr.length; i++){
        if(newArr[i] == newArr[i+1]){
            newArr.splice(newArr[i],1);
            i--;
        }
    }
    console.log(newArr);
}
console.timeEnd('1');
// 方法2
console.time('2');
{
    var arr=[];
    for(let i=0;i<10000;i++){
        arr.push(Math.floor(Math.random()*10 + 1));
    }

    var obj = {},
        newArr = [];
    for(let i=0; i<arr.length; i++){
        obj[arr[i]] = 'a';
    }
    for(let key in obj){
        newArr.push(key * 1);
    }
    console.log(newArr);
}
console.timeEnd('2');
// 方法3
console.time('3');
{
    var arr=[];
    for(let i=0;i<10000;i++){
        arr.push(Math.floor(Math.random()*10 + 1));
    }
    var newArr = [];
    for(let i=0; i<arr.length; i++){
        if(newArr.indexOf(arr[i]) < 0){
            newArr.push(arr[i]);
        }
    }
    newArr.sort((a,b)=>(a-b));
    console.log(newArr);
}
console.timeEnd('3');
// 方法4
console.time('4');
{
    var arr=[];
    for(let i=0;i<10000;i++){
        arr.push(Math.floor(Math.random()*10 + 1));
    }
    /*
    var set = new Set();
    for(let i=0; i<arr.length; i++){
        set.add(arr[i]);
    }
    var newArr = new Array(...set);
    */
    var newArr = [...new Set(arr)];
    newArr.sort((a,b)=>(a-b));
    console.log(newArr);
}
console.timeEnd('4');
 
耗时比较(从大到小): 结果 1 > 3 > 4 > 2

    第1次运行:1 3 2 4
    第2次运行:1 3 4 2
    第3次运行:1 3 4 2
    第4次运行:1 3 4 2
    第5次运行:1 3 4 2
    第6次运行:1 3 4 2
    第7次运行:1 3 4 2
    第8次运行:1 3 4 2
    第9次运行:1 3 4 2
    第10次运行:1 3 4 2
posted @ 2022-09-08 11:46  Acaninchoi  阅读(96)  评论(0)    收藏  举报