天天看点

关于多重数组取数,去重和排列

作为个刚入门的小白,想要每天分享点自己的学习成果,今天看到一道面试题,对一个多重数组[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方法对’,'分割,也可以得到最后结果。

今天的分享就到这,新手刚写,不喜勿喷。