已知如下數(shù)組:
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
編寫一個程序?qū)?shù)組扁平化去并除其中重復(fù)部分?jǐn)?shù)據(jù)枝冀,最終得到一個升序且不重復(fù)的數(shù)組
我們可以把處理過程分步驟進(jìn)行舞丛。
1 首先是去扁平化,即去掉數(shù)組的嵌套關(guān)系宾茂,此時可以利用數(shù)組的一個函數(shù)flat,即
arr.flat(Infinity)
關(guān)于這個函數(shù)的寫法瓷马,MDN上是這么表示他的語法結(jié)構(gòu)的,flat() 方法會按照一個可指定的深度遞歸遍歷數(shù)組,并將所有元素與遍歷到的子數(shù)組中的元素合并為一個新數(shù)組返回跨晴。注意:默認(rèn)深度是1
var newArray = arr.flat([depth])
flat的函數(shù)在ie下是不支持的欧聘,看MDN上可以reduce+concat來替代。
我們定義一個函數(shù)端盆,遞歸一下
const flatArray = arr => arr.reduce((a,b) => a.concat(Array.isArray(b) ? flatArray(b): b), []);
然后把我們的數(shù)組作為參數(shù)調(diào)用一次flatArray(arr)
2.去重可以利用set的不可重復(fù)的特性怀骤,將數(shù)組與set進(jìn)行一次互相轉(zhuǎn)化。即
new Set(arr.flat(Infinity))
3.將去重之后的set再轉(zhuǎn)換為arr
Array.from(new Set(arr.flat(Infinity)))
3.排序直接使用sort()函數(shù)焕妙,注意sort默認(rèn)是把數(shù)組成員作為字符串處理的蒋伦,所以我們要重新定義一下排序規(guī)則。
Array.from(new Set(arr.flat(Infinity))).sort((a,b)=>{return a-b})
看一下結(jié)果