題目描述 獲取 url 中的參數 1. 指定參數名稱,返回該參數的值 或者 空字元串 2. 不指定參數名稱,返回全部的參數對象 或者 {} 3. 如果存在多個同名參數,則返回數組 輸入例子: 輸出例子: 方法 思路其實都差不多: 1. 匹配出key=value中的key和value; 2. 需要返回 ...
題目描述
獲取 url 中的參數
- 指定參數名稱,返回該參數的值 或者 空字元串
- 不指定參數名稱,返回全部的參數對象 或者 {}
- 如果存在多個同名參數,則返回數組
輸入例子:
getUrlParam('http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe', 'key')
輸出例子:
[1, 2, 3]
方法
function getUrlParam(sUrl,sKey){
var result = {};
sUrl.replace(/\??(\w+)=(\w+)&?/g,function(a,k,v){
if(result[k] !== void 0){
var t = result[k];
result[k] = [].concat(t,v);
}else{
result[k] = v;
}
});
if(sKey === void 0){
return result;
}else{
return result[sKey] || '';
}
}
思路其實都差不多:
- 匹配出key=value中的key和value;
- 需要返回對象,則匹配結果用對象存儲起來,result[k] = v;
- 需要處理多個同名參數情況,利用concat拼接(concat返回的是數組副本)
- 需要考慮,輸入了參數可是參數沒對應,與沒傳入sKey 的情況
其實就是根據題目要求做出對應的返回,以及考慮問題要全面點(函數健壯性)。
可能有問題的地方
function(a,k,v),各輸入參數是什麼意思?
第一個參數a是整個匹配的字元串,接下來依次是正則裡面的分組(小括弧括起來為一組,),詳情請查看正則表達式的replace方法。
為啥[].concat(t,v)不能寫成t.concat(v)?
如果用t.concat(v),如果t不是數組,會變成字元串拼接。我們要用的concat方法是數組裡那個。而第一個出現的t是字元串。
void 0 是啥?void有如下作用:
- 通過採用void 0取undefined比採用字面上的undefined更靠譜更安全,應該優先採用void 0這種方式。
- 填充
<a>
的href確保點擊時不會產生頁面跳轉;
填充<image>
的src,確保不會向伺服器發出垃圾請求。