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 相关文章推荐
jquery 弹出层实现代码
Oct 30 Javascript
基于jquery可配置循环左右滚动例子
Sep 09 Javascript
js 编码转换 gb2312 和 utf8 互转的2种方法
Aug 07 Javascript
JS获取各种浏览器窗口大小的方法
Jan 14 Javascript
可恶的ie8提示缺少id未定义
Mar 20 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
Jun 03 Javascript
ajax在兼容模式下失效的快速解决方法
Mar 22 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
Feb 03 Javascript
vue 中滚动条始终定位在底部的方法
Sep 03 Javascript
使用Vue CLI创建typescript项目的方法
Aug 09 Javascript
JS实现提示框跟随鼠标移动
Aug 27 Javascript
Vue父子组件传值的一些坑
Sep 16 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
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
PHP4在WinXP下IIS和Apache2服务器上的安装实例
2006/10/09 PHP
使用PHP强制下载PDF文件示例
2014/01/17 PHP
PHP速成大法
2015/01/30 PHP
php短址转换实现方法
2015/02/25 PHP
PHP7正式版测试,性能惊艳!
2015/12/08 PHP
Yii框架中jquery表单验证插件用法示例
2016/10/18 PHP
一个基于jquery的文本框记数器
2012/09/19 Javascript
extjs tabpanel限制选项卡数量实现思路及代码
2013/04/02 Javascript
javascript full screen 全屏显示页面元素的方法
2013/09/27 Javascript
js读取被点击次数的简单实例(从数据库中读取)
2014/03/07 Javascript
jquery引用方法时传递参数原理分析
2014/10/13 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
js实现的二级横向菜单条实例
2015/08/22 Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
2015/10/16 Javascript
使用vue.js开发时一些注意事项
2016/04/27 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
js省市县三级联动效果实例
2020/04/15 Javascript
通过实例了解Nodejs模块系统及require机制
2020/07/16 NodeJs
[01:03:03]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python 文件转成16进制数组的实例
2018/07/09 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
python顺序执行多个py文件的方法
2019/06/29 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
Python3 解决读取中文文件txt编码的问题
2019/12/20 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
2020/02/14 Python
Keras-多输入多输出实例(多任务)
2020/06/22 Python
详解HTML5中的picture元素响应式处理图片
2018/01/03 HTML / CSS
平安建设实施方案
2014/03/19 职场文书
《神奇的克隆》教学反思
2014/04/10 职场文书
幼儿发展评估方案
2014/06/11 职场文书
新闻编辑求职信
2014/07/13 职场文书
2015年教学管理工作总结
2015/05/20 职场文书
《鸟的天堂》教学反思
2016/02/19 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书
SSM VUE Axios详解
2021/10/05 Vue.js