滴滴笔试编程题——实现parseQueryString

题目描述:
实现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]:"";
}

猜你喜欢

转载自blog.csdn.net/weixin_42420703/article/details/82775847
今日推荐