前端面试-编程题

/ 请在你熟悉的编辑器或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: '机场快轨'
        }
      }
    }
  }
  // data经过parse函数转化后,变成以下结构 /*
  let arr = [{
    lxid: {
      name: '5路'
    }
  }, {
    lzbd: {
      name: '20路'
    }
  }, {
    ldfx: {
      name: '107路'
    }
  }, {
    lwes: {
      name: '301路'
    }
  }, {
    lwic: {
      name: '地铁5号线'
    }
  }, {
    loin: {
      name: '机场快轨'
    }
  }, {
    lwdf: {
      name: '机场大巴线'
    }
  }];

 

我的代码,有点笨,有谁能给点新的思路或者办法

const parse = res => {
    const data = res.data.linedetails;
    const pc = []; // 公交
    let dtNum = [];
    let dtName = [];
    const l = /路/;
    const reg = /\d/gi;
    Object.keys(data).forEach(val => {
      let name = data[val].name;
      if (l.test(data[val].name)) {
        pc.push({
          id: val,
          name: data[val].name,
          road: Number(name.replace(l, ''))
        })
      } else {
        if (data[val].name.match(reg)) {
          dtNum.push({
            id: val,
            name: data[val].name,
            num: data[val].name.match(reg).join('')
          })
        } else {
          dtName.push({
            id: val,
            name: data[val].name,
          })
        }
      }
    });
    pc.sort((a, b) => {
      return a.road - b.road;
    })
    dtNum.sort((a, b) => {
      return a.num - b.num
    });
    dtName.sort((a, b) => {
      return a.name.length - b.name.length
    });
    let arr = [];
    pc.forEach(val => {
      let obj = {};
      obj[val.id] = {
        name: val.name
      }
      arr.push(obj)
    });
    dtNum.forEach(val => {
      let obj = {};
      obj[val.id] = {
        name: val.name
      }
      arr.push(obj)
    });
    dtName.forEach(val => {
      let obj = {};
      obj[val.id] = {
        name: val.name
      }
      arr.push(obj)
    });
    return arr
  };
  console.log(parse(res));

面试

你可能感兴趣的:(面试)