將數組扁平化並去除其中重復數據,最終得到一個升序且不重復的數組


問題描述:
已知如下數組: var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]; 編寫一個程序將數組扁平化去並除其中重復部分數據,最終得到一個升序且不重復的數組

解決問題:

思路: 扁平化處理 => 去重 => 升序
step1:
  借助數組自帶的flat函數進行扁平化處理
  var newArray =arr.flat(depth) //flat方法依賴瀏覽器支持,部分低版本瀏覽器可能不支持該方法
  
 step2:
   ES6提供了一個強大的數組去重方法 Set
   
  var newArray =Array.from(new Set(arr))
 
 step3:
  常用排序 sort方法
  var newArray =arr.sort((pre,next)=>{return pre - next})
 
Array.from(new Set(arr.flat(4))).sort((pre,next)=>{ return pre-next}) //低版本chrome不支持flat方法

 

還有一種簡單的扁平化實現方法,但不太推薦:

Array.from(new Set(arr.toString().split(","))).sort((pre,next)=>{ return pre - next})

 

這樣就實現了該功能,有沒有其他方法也能實現該功能?

 

   function flat(arr=[],res=[]){
        return arr.reduce((pre,cur)=>{
            if(Array.isArray(cur)){
                flat(cur,pre)              //遞歸實現扁平化
            }else{
                pre.push(cur)
            }
            return pre
        },res)
    }
    function uniq(arr=[]){
        return Array.from( new Set(arr))
    }
    function upper(arr=[]){
        return arr.sort((pre,next)=>{
            return pre-next
        })
    }
    [flat,uniq,upper].reduce((pre,fn)=>{          //依次調用當前方法 並傳入前一個函數返回的值
        return fn(pre)
    },arr)

該方法是查閱得到,通過遞歸使數組扁平化,無需擔心瀏覽器不支持flat的使用,結尾的方法調用個人非常喜歡

 

 

 



 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM