要求:
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);
}
让我们先来梳理下解题思路:
首先观察url1,url2,url3的区别。
然后观察执行结果的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*/
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。