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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值