作為個剛入門的小白,想要每天分享點自己的學習成果,今天看到一道面試題,對一個多重數組[12,[3,5],[4,[11,[6],7]],2,8],怎麼取出并去重排列他們,我第一時間想到最基礎的方法。
一、怎麼把雜亂的資料取出來放在一個數組裡:
let arr = [12,[3,5,8,7],6,[4,[11,[6,12],7]],2,8]
let newArr = [];
function getItem(arr){
for(let i=0;i<arr.length;i++){
Array.isArray(arr[i])?getItem(arr[i]):newArr.push(arr[i])
}
}
getItem(arr)
console.log(newArr) //[12, 3, 5, 8, 7, 6, 4, 11, 6, 12, 7, 2, 8]
結果是可以實作的,這裡用到了遞歸,在getItem方法中的第一個for循環裡,用到了Array.isArray()方法判斷,這個方法是判斷是否為數組,傳回值為true或false,如果傳回true說明這個子項還是數組,那就繼續調用getItem方法,這樣不管嵌套多少層數組都會被解析徹底。
二,排序
newArr.sort((a,b)=>a-b)// [2, 3, 4, 5, 6, 6, 7, 7, 8, 8, 11, 12, 12]
這個sort排序是數組的一個方法,形參是一個函數,a-b代表升序,b-a代表降序。
三,去重
Array.from(new Set(newArr.sort((a,b)=>a-b)))//[2, 3, 4, 5, 6, 7, 8, 11, 12]
這裡可以new一個Set執行個體,set方法可以給數組去重,但是結果放在一個json數組裡。通過Array.from()方法可以轉化為數組。
這裡說一下,上面的第一步是有簡便的方法的,用到join方法,最簡便的方法是這樣:
Array.from(new Set(arr.join().split(",").sort((a,b)=>a-b)))//[2, 3, 4, 5, 6, 7, 8, 11, 12]
join方法是将數組裡面的所有項通過字元串形式轉化,不管你嵌套多少層數組,他都會最後轉化過來,像[1,[1,[2,3]]]通過join方法轉化後,得到’1,1,2,3’的字元串,再通過split方法對’,'分割,也可以得到最後結果。
今天的分享就到這,新手剛寫,不喜勿噴。