已知如下數(shù)組:
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
編寫一個(gè)程序?qū)?shù)組扁平化去并除其中重復(fù)部分?jǐn)?shù)據(jù),最終得到一個(gè)升序且不重復(fù)的數(shù)組
我們可以把處理過程分步驟進(jìn)行。
1 首先是去扁平化,即去掉數(shù)組的嵌套關(guān)系,此時(shí)可以利用數(shù)組的一個(gè)函數(shù)flat,即
arr.flat(Infinity)
關(guān)于這個(gè)函數(shù)的寫法,MDN上是這么表示他的語法結(jié)構(gòu)的,flat() 方法會(huì)按照一個(gè)可指定的深度遞歸遍歷數(shù)組,并將所有元素與遍歷到的子數(shù)組中的元素合并為一個(gè)新數(shù)組返回。注意:默認(rèn)深度是1
var newArray = arr.flat([depth])
flat的函數(shù)在ie下是不支持的,看MDN上可以reduce+concat來替代。
我們定義一個(gè)函數(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é)果
