Giter Club home page Giter Club logo

amap_test's Introduction

amap_test

记录一次高德面试题

请在你熟悉的编辑器或IDE里写好代码后用屏幕截图工具截取并提交(注意:不接受手机拍照) /*

  • 实现函数parse,将服务端返回的公交数据按下面定义的规则优先级输出:
    1. 输出常规线路,并按照线路数字从小到大排列(如20路,301路等这些都是常规路线)
    1. 输出地铁线路,并按照线路数字从小到大排序
    1. 输出其它线路,并按照线路名称长短从小到大排序
  • 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: '机场快轨' } } } } const data = parse(res) // data经过parse函数转化后,变成以下结构 / [{ lxid: { name: '5路' } }, { lzbd: { name: '20路' } }, { ldfx: { name: '107路' } }, { lwes: { name: '301路' } }, { lwic: { name: '地铁5号线' } }, { loin: { name: '机场快轨' } }, { lwdf: { name: '机场大巴线' } }] */

以下是源码:

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) {
    if (res.code == 0) {
        let _allData = [];
        for(let i in res.data.linedetails){
            _allData.push({[i] : res.data.linedetails[i]});
        }

        let _busList = sortBus(filtBus(_allData));
        let _subwayList = sortSubway(filtSubway(_allData));
        let _otherList = sortOther(filtOther(_allData));

        return _busList.concat(_subwayList).concat(_otherList);
    } else {
        return [];
    }
}

function filtBus(val) {
    return val.filter((item) => { return Object.values(item)[0].name.search('路') > 0 });
}

function sortBus(val) {
    var arr = val;
    for(var j=0;j<arr.length-1;j++){
           for(var i=0;i<arr.length-1-j;i++){
               let currentS = Object.values(arr[i])[0].name;
               let currentNum = currentS.slice(0, currentS.search('路'))
               let nextS = Object.values(arr[i+1])[0].name;
               let nextNum = nextS.slice(0, nextS.search('路'))
                if(+currentNum>+nextNum){
                    var temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            } 
        }
        return arr;
}

function filtSubway(val) {
    return val.filter((item) => { return Object.values(item)[0].name.search('地铁') == 0 });
}

function sortSubway(val) {
    var arr = val;
    for(var j=0;j<arr.length-1;j++){
           for(var i=0;i<arr.length-1-j;i++){
               let currentS = Object.values(arr[i])[0].name;
               let currentNum = currentS.slice(currentS.search('地铁'), currentS.search('号线'))
               let nextS = Object.values(arr[i+1])[0].name;
               let nextNum = nextS.slice(nextS.search('地铁'), nextS.search('号线'))
                if(+currentNum>+nextNum){
                    var temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            } 
        }
        return arr;
}

function filtOther(val) {
    return val.filter((item) => { return Object.values(item)[0].name.search('路') == -1 && Object.values(item)[0].name.search('地铁') == -1 });
}

function sortOther(val) {
    var arr = val;
    for(var j=0;j<arr.length-1;j++){
           for(var i=0;i<arr.length-1-j;i++){
               let currentS = Object.values(arr[i])[0].name;
               let nextS = Object.values(arr[i+1])[0].name;
                if(currentS.length>+nextS.length){
                    var temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            } 
        }
        return arr;
}

console.log(parse(res));

结果

amap_test's People

Contributors

lita-jerry avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.