js面试题分享

问题描述

编程题一:

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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值