前端进阶(每日一题)

/ 请在你熟悉的编辑器或IDE里写好代码后用屏幕截图工具截取并提交(注意: 不接受手机拍照)
  /* * 实现函数parse,将服务端返回的公交数据按下面定义的规则优先级输出: * * 1.
  输出常规线路,并按照线路数字从小到大排列(如20路,301路等这些都是常规路线) * 2. 输出地铁线路,并按照线路数字从小到大排序 * 3. 输出其它线路,并按照线路名称长短从小到大排序 * * parse的函数签名是: *
  declare function parse(res: Object): Object; * * 下面代码为示例数据按照上述规则和函数签名转换后结果,请参照该示例数据实现对应效果 */

// 初始数据结构
const res = { 
    code: 0,  
    data: { 
        lines: '20路,301路,5路,地铁5号线,机场大巴线,107路,机场快轨', 
        lineids: 'lzbd,lwes,lxid,lwic,lwdf,ldfx,loin', 
        linedetails: { lwdf: { name: '机场大巴线' }, lwes: { name: '301路' }, lwic: { name: '地铁5号线' }, ldfx: { name: '107路' },
        lzbd: { name: '20路' }, lxid: { name: '5路' }, loin: { name: '机场快轨' } }
    }
}

// 要整合成的数据
let data = [
    { lxid: { name: '5路' } }, 
    { lzbd: { name: '20路' } }, 
    { ldfx: { name: '107路' } },
    { lwes: { name: '301路' } }, 
    { lwic: { name: '地铁5号线' } }, 
    { loin: { name: '机场快轨' } }, 
    { lwdf: { name: '机场大巴线' } }
]

 开始答题

// 答题代码
const parse = (res) => {
    let arr = []
    let DataObj = Object.assign(res.data.linedetails, res.data.lzbd)
    let arr1 = [] // 公交
    let arr2 = [] // 地铁
    let arr3 = [] // 其他
    for (const item in DataObj) {
        let objName = DataObj[item]
        if (/\d/g.test(objName.name) && objName.name.indexOf('地铁') == -1) {
            let obj = {}
            obj[item] = objName
            arr1.push(obj)
        }
        else if (objName.name.indexOf('地铁') != -1) {
            let obj = {}
            obj[item] = objName
            arr2.push(obj)
        } 
        else {
            let obj = {}
            obj[item] = objName
            arr3.push(obj)
        }
    } 
    arr1.sort((a, b) => Object.values(a)[0].name.replace(/[^0-9]+/g,'') - Object.values(b)[0].name.replace(/[^0-9]+/g,''))
    arr2.sort((a, b) => Object.values(a)[0].name.replace(/[^0-9]+/g,'') - Object.values(b)[0].name.replace(/[^0-9]+/g,''))
    arr3.sort((a, b) => Object.values(a)[0].name.length - Object.values(b)[0].name.length)

    arr = [...arr1, ...arr2, ...arr3]

    return arr
}

console.log(parse(res));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值