问题描述
编程题一:
const lists = [1,5,9,9,7,10,2,5,{a:3,b:4},[6,8,10]]
//要求:将lists中的元素去重平铺后升序排列
//期望结果:[1,2,3,4,5,6,7,8,9,10]
原因分析:
其实方法有很多,但个人认为,只要是能完成需求的就是好代码,废话不多说,分析一下。
首先该数组里面包含三种数据类型:number,object,array。
我们需要把整个数组先进行扁平化处理,会用到数组的flat方法,但是flat方法是没有办法处理object类型的数据的,所以我们第二步需要进行遍历,做判断,如果是number类型就加入新的数组,否则就进行第二次遍历,此时这条线必然是object类型,把他每一项也都添加到新的数组,这里用到push方法。
此时的新数组已经非常明了了,我们只需要先去重,这里我们使用new Set(),然后再排序,用到sort()方法。最后输出结果。
解决方案:
具体代码如下:
const arr = [1,5,9,9,7,10,2,5,{a:3,b:4},[6,8,10]]
//创建新数组
let newArr = []
// 参数Infinity可以无视层级,简化到底
arr.flat(Infinity).forEach(item => {
if (typeof item === 'number') {
newArr.push(item)
} else {
for (let k in item) {
newArr.push(item[k])
}
}
})
//注意new Set()的用法 sort的用法
let res = [...new Set(newArr)].sort((a,b) => a - b)
console.log(res)