JavaScript 一道字符串分解的题目


Posted in Javascript onAugust 03, 2011

去某公司(公司名不说了,人这套题说不定还要用)面试,现场30分钟做了一套题,其中有一道是这样的:

要求用js写一个函数,对传入的形如下网址字符串,返回对应的对象。
如:
若传入字符串a='?name=zhiyelee&blog=www.tsnrose.com';
则返回 b={‘name':'zhiyelee','blog':'www.tsnrose.com'}

当时由于时间比较短,实现的有些问题,回来后想了一下,总结如下:
我想到了两种思路,一种是使用正则表达式,第二种是使用字符串的split函数。

1、使用正则表达式处理
我首先想到的是使用正则表达式处理,可能是感觉这个更有挑战性写起来也最简洁,不过当时怀疑这种方法的效率会低于直接使用字符串函数处理的效率。这个效率我们在下文会验证~
这个方法的思路很简单,就是使用正则表达式每次匹配出一个‘***=###'串,然后循环最后取出所有。
代码如下

var getNRReg = function(str) { 
var res = {}; 
var reg = /(\w+)=(\w+)/g; 
while ((a = reg.exec(str))) { 
res[a[1]] = a[2]; 
} 
return res; 
};

2、使用字符串函数处理
这种想法思路也比较常规,不过写起来肯定要比使用正则表达式处理麻烦一些。
我的思路首先用‘&'将原串分割成多个字串,每个字串的样式如‘***=###',然后再对字串应用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; 
}

这两种方法的效率问题
众所周知正则表达式的效率有点低,因此最初认为第一种方案的效率肯定要低于第二种方案的效率,于是实测了下,结果不然:

执行1000000次的耗时情况:
getNRReg执行耗时 4399ms
getNRSplit执行耗时 6116ms

完整源代码查看: jsfiddle ,可以自行测试~

ps:
最后附上新浪微博2011-06-15 在北邮宣讲会前端岗位的一道笔试题:

用正则表达式完成删除与某个字符相邻且相同的字符,比如“fdaffdaaklfjk”字符串处理之后成为“fdafdakljk”。

我的答案见 jsfiddle

Javascript 相关文章推荐
javascript 读取XML数据,在页面中展现、编辑、保存的实现
Oct 27 Javascript
基于jquery的direction图片渐变动画效果
May 24 Javascript
jQuery UI的Dialog无法提交问题的解决方法
Jan 11 Javascript
基于JQUERY的多级联动代码
Jan 24 Javascript
跟我学习JScript的Bug与内存管理
Nov 18 Javascript
Bootstrap每天必学之按钮(一)
Nov 24 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
Apr 03 Javascript
深入浅析JavaScript中的RegExp对象
Sep 18 Javascript
Node.js利用console输出日志文件的方法示例
Apr 27 Javascript
详解React之key的使用和实践
Sep 29 Javascript
Vue.js组件高级特性实例详解
Dec 24 Javascript
Vue使用v-viewer实现图片预览
Oct 21 Javascript
JavaScript中去掉数组中的重复值的实现方法
Aug 03 #Javascript
JavaScript 大数据相加的问题
Aug 03 #Javascript
推荐11款jQuery开发的复选框和单选框美化插件
Aug 02 #Javascript
JS 控制小数位数的实现代码
Aug 02 #Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
Aug 02 #Javascript
JQuery+JS实现仿百度搜索结果中关键字变色效果
Aug 02 #Javascript
基于jquery实现漂亮的动态信息提示效果
Aug 02 #Javascript
You might like
PHP跨时区(UTC时间)应用解决方案
2013/01/11 PHP
PHP 使用header函数设置HTTP头的示例解析 表头
2013/06/17 PHP
基于PHP创建Cookie数组的详解
2013/07/03 PHP
部署PHP项目应该注意的几点事项分享
2013/12/20 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
2014/07/01 PHP
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
javascript定义函数的方法
2010/12/06 Javascript
子页向父页传值示例
2013/11/27 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
2016/06/03 Javascript
js实现开启密码大写提示
2016/12/21 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
2017/12/18 Javascript
vue 之 css module的使用方法
2018/12/04 Javascript
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
js实现金山打字通小游戏
2020/07/24 Javascript
js获取url页面id,也就是最后的数字文件名
2020/09/25 Javascript
JavaScript实现弹出窗口效果
2020/12/09 Javascript
[04:02]2014DOTA2国际邀请赛 BBC每日综述中国战队将再度登顶
2014/07/21 DOTA
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
[43:47]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第一场 12.09
2020/12/11 DOTA
[47:45]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第一场 2月26日
2021/03/11 DOTA
python try 异常处理(史上最全)
2019/03/07 Python
Mac安装python3的方法步骤
2019/08/09 Python
pyenv与virtualenv安装实现python多版本多项目管理
2019/08/17 Python
使用Python的networkx绘制精美网络图教程
2019/11/21 Python
selenium携带cookies模拟登陆CSDN的实现
2021/01/19 Python
CSS3中Animation动画属性用法详解
2016/07/04 HTML / CSS
美国现代家具网站:Design Within Reach
2018/07/19 全球购物
求职信的七个关键技巧
2014/02/05 职场文书
生日宴会策划方案
2014/06/03 职场文书
2014年宣传部工作总结
2014/11/12 职场文书
公司管理制度范本
2015/08/03 职场文书
团支部书记竞选稿
2015/11/21 职场文书
Mysql如何查看是否使用到索引
2022/12/24 MySQL