要求:
1、只能在指定的位置填写自己的代码,本文件里的其他代码不能修改
2、所有题目都不允许添加全局变量名
3、本文件应该能在firebug的console里正常执行,并输出结果
4、代码最优化,效率最高
5、代码注释明确

function urlParser(s){
        //+++++++++++答题区域+++++++++++



                
        //+++++++++++答题结束+++++++++++
}

try{
        var url1 = "http://www.abc.com/m/s/#page/2/?type=latest_videos&page_size=20";
        var url2 = "http://www.abc.com/m/s/#type=latest_videos&page_size=20";
        var url3 = "http://www.abc.com/m/s/#page?type=latest_videos&page_size=20";

        console.group();
        console.info( urlParser(url1) );
        console.info( urlParser(url2) );
        console.info( urlParser(url3) );
        console.groupEnd();
        /*------[执行结果]------

        ["page", "2", { "type": "latest_videos", "page_size": 20 }]
        [{ "type": "latest_videos", "page_size": 20 }]
        ["page", { "type": "latest_videos", "page_size": 20 }]
        
        ------------------*/
        
}catch(e){
        console.error("执行出错,错误信息: " + e);
}

让我们先来梳理下解题思路:

  1. 首先观察url1,url2,url3的区别。

  2. 然后观察执行结果的3段输出内容。

  3. 最后找url1,url2,url3对应的输出内容的联系。

开始解题:


function urlParser(s){
    var a = [];
    /*创建个空字符串,储存输出的内容*/
    var _w = s.split("#")[1];
    /*把传入的参数url1...用#分割,获取第二部分,也就是#后面的字符串*/
    var _json = {}; 
    /*创输出数组中的json元素*/
    var _q = _w.split("?");
    /*把#号后面的字符串用?分割,实际上就url1,url3分割2段,url2不做分割*/
    var _s = _q[0].split("/",2);
    /*把?前面的字符串用/分割,最高允许分割2段。*/
    for(var i=0;i<_s.length;i++){
    /*遍历#号到?号之间的数组*/ 
        if(_q.length === 2){
        /*当_q的长度为2时执行,也就是不执行传入url2*/
            a.push(_s[i]);
            /*将url1和url3中#号到?号之间的数组从后依次传入a*/
        }
    }
    if(_q[1]){
    /*如果参数中有?号,执行以下代码(url1,url3)*/
        var _a = _q[1].split("&");
        /*将?号分割的字符串第二段中再用&号分割*/
        for(var j=0;j<_a.length;j++){
        /*遍历?号后面的[type=latest_videos,page_size=20]长度为2的数组*/
            var _e = _a[j].split("=");    
            /*将数组[type=latest_videos,page_size=20],用=号分割,输出[type,latest_videos],[page_size,20]*/
            _json[_e[0]] = _e[1];
            /*把等号前面的与后面的分别用属性和属性值来传入_json对象*/

        }
    }else{
    /*否则执行(url2)*/
        var _a = _q[0].split("&");
        /*将?号分割的字符串第一段中再用&号分割*/
        for(var k=0;k<_a.length;k++){
            var _e = _a[k].split("=");
            _json[_e[0]] = _e[1]; 
        }
    }
    a.push(_json);
    /*将_json传入a数组中*/
    return JSON.stringify(a);
    /*函数最终返回数组a*/
}

徐鹏云
353 声望5 粉丝

null == undefined null !== undefined


« 上一篇
JS简易留言板
下一篇 »
JS数组方法