题目描述:
实现parseQueryString(url,key)函数,输入合法url,及key值,从url中查找key值对应的value,并返回,如果查不到,返回"",例如:输入"https://www.baidu.com?key1=value1&key2=value2", “key1”,则返回"value1"
方法一:灵活使用字符串的indexOf以及substr方法(较麻烦,推荐方法二)
要考虑如下几点:
- 后面的key值覆盖前面的key值,要取后面的"key=&key=123",取"123"
- 要是在字符?之后的串中查找
- 不能单纯的匹配?之后的字符串,或许输入的key值只是正确key值的子串! 一定要匹配?与=之间的key,或者&与=之间的key,就是确保key之前的符号为?或者&。例如:url="…/?key1=123&key2=456",key=“key1"时,返回123,key=“ey1"或者"ey2"的时候返回””,
parseQueryString=function (url,key){
var index_key=url.lastIndexOf(key);
var result="";
if(url[index_key-1]=="?"||url[index_key-1]=="&"){
var index_s=url.indexOf('=',index_key);
if(url.substring(index_key,index_s)==key){
var index_v=url.indexOf('&',index_s);
if(index_v==-1){
result=url.substr(index_s+1);
}else {
result=url.substring(index_s+1,index_v);
}
return result;
}
}
return result;
}
方法二:使用对象的属性值唯一的特性
要考虑如下几点:
- 当不传key值时,返回"",而不是undefined
- 当不匹配时,返回""
var parseQueryString1=function(url,key){
var str = url.split("?")[1];
var params = str.split("&");
var result = {};
for (var i = 0; i < params.length; i++) {
var arr = params[i].split("=");
result[arr[0]] = arr[1];
}
return result[key]?result[key]:"";
}