面试题分享-高德面试1

本次分享的是一道数据解析题:主要用到原生js中的一些数组和字符串的方法:

 <script>

    // 要求:

    // * 1. 输出常规线路,并按照线路数字从小到大排列(如20路,301路等这些都是常规路线)

    // * 2. 输出地铁线路,并按照线路数字从小到大排序

    // * 3. 输出其它线路,并按照线路名称长短从小到大排序

    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: '机场快轨'
          }
        }
      }
    }

    function parse(res) {
      let allRouteName = res.data.lineids.split(',')
      let allRoute = res.data.lines.split(',')
      var route = []
      var routeName = []
      var busRoute = []
      var busRouteName = []

      // 公交路线处理
      allRoute.forEach((item, index) => {
        busRoute.push(item.split('').slice(0, -1).join(''))
      })
      busRoute = busRoute.filter((item, index) => {
        if (Number(item)) {
          busRouteName.push(allRouteName[index])
          return item
        }
      })
      for (var i = 0; i < busRoute.length; i++) {
        busRoute[i] = Number(busRoute[i])
      }
      // 排序
      for (var i = 0; i < busRoute.length; i++) {
        var min = i
        for (var j = i + 1; j < busRoute.length; j++) {
          min = busRoute[min] < busRoute[j] ? min : j
        }
        var temp = busRoute[i]
        busRoute[i] = busRoute[min]
        busRoute[min] = temp
        var df = busRouteName[i]
        busRouteName[i] = busRouteName[min]
        busRouteName[min] = df
      }
      for (var i = 0; i < busRoute.length; i++) {
        busRoute[i] = busRoute[i] + "路"
      }
      // ["5路", "20路", "107路", "301路"] (4) ["lxid", "lzbd", "ldfx", "lwes"]
      route = route.concat(...busRoute)
      routeName = routeName.concat(...busRouteName)


      // 地铁部分处理:
      var subwayRouteName = []
      var subwayRoute = res.data.lines.split(',').filter((item, index) => {
        if (item.indexOf('地铁') > -1) {
          subwayRouteName.push(res.data.lineids.split(',')[index])
          return item
        }
      })
      // 对地铁的路径进行排序
      for (var i = 0; i < subwayRoute.length; i++) {
        var min = i
        for (var j = i + 1; j < subwayRoute.length; j++) {
          min = Number(subwayRoute[min].slice(2, -2)) < Number(subwayRoute[j].slice(2, -2)) ? min : j
        }
        var temp = subwayRoute[i]
        subwayRoute[i] = subwayRoute[min]
        subwayRoute[min] = temp
        var fd = subwayRouteName[i]
        subwayRouteName[i] = subwayRouteName[min]
        subwayRouteName[min] = fd
      }
      // ) ["地铁2号线", "地铁5号线", "地铁22号线"] (3) ["dd", "lwic", "sss"]
      route = route.concat(...subwayRoute)
      routeName = routeName.concat(...subwayRouteName)



      // 其它部分处理
      var otherRoute = []
      var otherRouteName = []
      var data = res.data.lines.split(',')
      for (var i = 0; i < data.length; i++) {
        if (data[i].indexOf('地铁') < 0) {
          if (!Number(data[i].slice(0, -1))) {
            otherRoute.push(data[i])
            otherRouteName.push(res.data.lineids.split(',')[i])
          }
        }
      }
      // 排序
      for (var i = 0; i < otherRoute.length; i++) {
        var min = i
        for (var j = i + 1; j < otherRoute.length; j++) {
          min = otherRoute[min].length < otherRoute[j].length ? min : j;
        }
        var temp = otherRoute[i]
        otherRoute[i] = otherRoute[min]
        otherRoute[min] = temp
        var df = otherRouteName[i]
        otherRouteName[i] = otherRouteName[min]
        otherRouteName[min] = df
      }
      //  ["机场快轨", "机场大巴线"] (2) ["loin", "lwdf"]

      // 整合数据
      route = route.concat(otherRoute)
      routeName = routeName.concat(otherRouteName)

      // 按照规则生成
      var resultRoute = []
      for (var i = 0; i < route.length; i++) {
        var obj = {}
        obj[routeName[i]] = {
          name: route[i]
        }
        resultRoute.push(obj)
      }
      return resultRoute
    }
    var resultRoute = parse(res)
    console.log("resultRoute", resultRoute)
  </script>

最终结果:
在这里插入图片描述
以上代码可做优化处理。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值