美文网首页
js快速排序及高阶数组转低阶数组及数组去重

js快速排序及高阶数组转低阶数组及数组去重

作者: evilGenuis_9527 | 来源:发表于2019-04-11 09:23 被阅读0次
    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})
    

    相关文章

      网友评论

          本文标题:js快速排序及高阶数组转低阶数组及数组去重

          本文链接:https://www.haomeiwen.com/subject/uyeziqtx.html