還有一種簡單的扁平化實現方法,但不太推薦: 這樣就實現了該功能,有沒有其他方法也能實現該功能? 該方法是查閱得到,通過遞歸使數組扁平化,無需擔心瀏覽器不支持flat的使用,結尾的方法調用個人非常喜歡 ...
問題描述:
已知如下數組:
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的使用,結尾的方法調用個人非常喜歡