天天看點

關于多重數組取數,去重和排列

作為個剛入門的小白,想要每天分享點自己的學習成果,今天看到一道面試題,對一個多重數組[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方法對’,'分割,也可以得到最後結果。

今天的分享就到這,新手剛寫,不喜勿噴。