var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]; //编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组
let newArr=[];
let set=new Set()
setArr=(arr)=>{
arr.forEach(item=>{
if(typeof(item=='object')&&Array == item.constructor){
setArr(item)
}else{
set.add(item)
}
})
}
quickSort=(arr)=>{
if(arr.length<=1){
return arr
}
let pvotIndex=Math.floor(arr.length/2);
let pvot =arr.splice(pvotIndex,1)[0];
let left=[];
let right=[];
for(let i=0;i<arr.length;i++){
if(arr[i]<pvot){
left.push(arr[i])
}else {
right.push(arr[i])
}
}
return [...quickSort(left),pvot,...quickSort(right)]
}
setArr(arr);
newArr=[...set]
newArr=quickSort(newArr);
console.log(newArr,'set ')
首先利用ES6 SET数据类的特性递归去重复数据。然后使用快速排序对数组进行排序
上面是手写的,下面有纯用api不使用快排的写法
Array.from(new Set(arr.flat(Infinity))).sort((a,b)=>{ return a-b})
网友评论