前端進(jìn)階|第七天 攜程筆試題,嵌套數(shù)組去層級(jí)去重并排序

已知如下數(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é)果

image.png

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容