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

浙公网安备 33010602011771号