JavaScript 一道字串分解的題目

來源:互聯網
上載者:User

去某公司(公司名不說了,人這套題說不定還要用)面試,現場30分鐘做了一套題,其中有一道是這樣的:

要求用js寫一個函數,對傳入的形如下網址字串,返回對應的對象。
如:
若傳入字串a='?name=zhiyelee&blog=www.tsnrose.com';
則返回 b={‘name':'zhiyelee','blog':'www.tsnrose.com'}

當時由於時間比較短,實現的有些問題,回來後想了一下,總結如下:
我想到了兩種思路,一種是使用Regex,第二種是使用字串的split函數。

1、使用Regex處理
我首先想到的是使用Regex處理,可能是感覺這個更有挑戰性寫起來也最簡潔,不過當時懷疑這種方法的效率會低於直接使用字串函數處理的效率。這個效率我們在下文會驗證~
這個方法的思路很簡單,就是使用Regex每次匹配出一個‘***=###'串,然後迴圈最後取出所有。
代碼如下 複製代碼 代碼如下:var getNRReg = function(str) {
var res = {};
var reg = /(\w+)=(\w+)/g;
while ((a = reg.exec(str))) {
res[a[1]] = a[2];
}
return res;
};

2、使用字串函數處理
這種想法思路也比較常規,不過寫起來肯定要比使用Regex處理麻煩一些。
我的思路首先用‘&'將原串分割成多個字串,每個字串的樣式如‘***=###',然後再對字串應用split(‘=')。(此種方法沒有使用正則,當然我們可以使用正則split(/&|=/)
代碼如下 複製代碼 代碼如下:var getNRSplit = function(str) {
var temp, res = {},
i, ret;
str = str.slice(1);
temp = str.split('&');
for (i = 0; i < temp.length; i++) {
ret = temp[i].split('=');
res[ret[0]] = ret[1];
}
return res;
}

這兩種方法的效率問題
眾所周知Regex的效率有點低,因此最初認為第一種方案的效率肯定要低於第二種方案的效率,於是實測了下,結果不然:

執行1000000次的耗時情況:
getNRReg執行耗時 4399ms
getNRSplit執行耗時 6116ms

完整原始碼查看: jsfiddle ,可以自行測試~

ps:
最後附上新浪微博2011-06-15 在北郵宣講會前端崗位的一道筆試題:

用Regex完成刪除與某個字元相鄰且相同的字元,比如“fdaffdaaklfjk”字串處理之後成為“fdafdakljk”。

我的答案見 jsfiddle

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.