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文件上传插件Uploadify使用指南
Jun 05 Javascript
jquery仿百度经验滑动切换浏览效果
Apr 14 Javascript
jQuery实现返回顶部效果的方法
May 29 Javascript
SWFUpload多文件上传及文件个数限制的方法
May 31 Javascript
javascript显示倒计时控制按钮的简单实现
Jun 07 Javascript
jquery文字填写自动高度的实现方法
Nov 07 Javascript
AngularJS实现根据不同条件显示不同控件
Apr 20 Javascript
Vue.js实现价格计算器功能
Mar 30 Javascript
Vue导出json数据到Excel电子表格的示例
Dec 04 Javascript
简单理解Vue中的nextTick方法
Jan 30 Javascript
bootstrap实现嵌套模态框的实例代码
Jan 10 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
Apr 26 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
检测png图片是否完整的php代码
2010/09/06 PHP
php设计模式 Bridge (桥接模式)
2011/06/26 PHP
PHP读取PPT文件的方法
2015/12/10 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
JavaScript String.replace函数参数实例说明
2013/06/06 Javascript
$(&quot;&quot;).click与onclick的区别示例介绍
2014/09/25 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
基于javascript编写简单日历
2016/05/02 Javascript
详解nodejs微信公众号开发——3.封装消息响应模块
2017/04/10 NodeJs
Node.js学习之TCP/IP数据通讯(实例讲解)
2017/10/11 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
使用 node.js 模仿 Apache 小部分功能
2019/07/07 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
JS实现前端路由功能示例【原生路由】
2020/05/29 Javascript
Python3基础之list列表实例解析
2014/08/13 Python
Python实现处理管道的方法
2015/06/04 Python
Django在win10下的安装并创建工程
2017/11/20 Python
python pexpect ssh 远程登录服务器的方法
2019/02/14 Python
Python编写带选项的命令行程序方法
2019/08/13 Python
python中通过selenium简单操作及元素定位知识点总结
2019/09/10 Python
pytorch点乘与叉乘示例讲解
2019/12/27 Python
python+OpenCV实现图像拼接
2020/03/05 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
html5之Canvas路径绘图、坐标变换应用实例
2012/12/26 HTML / CSS
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
方法名是否可以与构造器的名字相同
2012/06/04 面试题
交通事故检查书范文
2014/01/30 职场文书
爱护公共设施倡议书
2014/08/29 职场文书
2015年评职称工作总结范文
2015/04/20 职场文书
担保书格式范文
2015/09/22 职场文书
八年级语文教学反思
2016/03/03 职场文书
jackson json序列化实现首字母大写,第二个字母需小写
2021/06/29 Java/Android
解决xampp安装后Apache无法启动
2022/03/21 Servers
MySQL 字符集 character
2022/05/04 MySQL
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL