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 学习书 推荐
Jun 13 Javascript
javascript打印大全(打印页面设置/打印预览代码)
Mar 29 Javascript
jquery实现按Enter键触发事件示例
Sep 10 Javascript
js 验证身份证信息有效性
Mar 28 Javascript
原生javascript实现图片滚动、延时加载功能
Jan 12 Javascript
JavaScript简单修改窗口大小的方法
Aug 03 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
Jun 02 Javascript
jQuery实现为LI列表前3行设置样式的方法【2种方法】
Sep 04 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
Aug 19 Javascript
简单谈谈关于Angular Cli打包的事
Sep 05 Javascript
mui back 返回刷新页面的实例
Dec 06 Javascript
在微信小程序中使用图表的方法示例
Apr 25 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中的cookie
2006/11/26 PHP
使用PHP强制下载PDF文件示例
2014/01/17 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
如何在Web页面上直接打开、编辑、创建Office文档
2007/03/12 Javascript
一实用的实现table排序的Javascript类库
2007/09/12 Javascript
关于javascript 回调函数中变量作用域的讨论
2009/09/11 Javascript
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
js函数调用常用方法详解
2012/12/03 Javascript
JQuery设置和去除disabled属性的5种方法总结
2013/05/16 Javascript
js 实现浏览历史记录示例
2014/04/20 Javascript
javascript根据时间生成m位随机数最大13位
2014/10/30 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
使用Karma做vue组件单元测试的实现
2020/01/16 Javascript
详细分析React 表单与事件
2020/07/08 Javascript
Python smallseg分词用法实例分析
2015/05/28 Python
Python base64编码解码实例
2015/06/21 Python
对numpy的array和python中自带的list之间相互转化详解
2018/04/13 Python
Python安装selenium包详细过程
2019/07/23 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
python 获取当前目录下的文件目录和文件名实例代码详解
2020/03/10 Python
个人找工作求职简历的自我评价
2013/10/20 职场文书
给男朋友的道歉信
2014/01/12 职场文书
教师年度考核自我鉴定
2014/01/19 职场文书
高中体育教学反思
2014/01/29 职场文书
外贸专业求职信
2014/03/09 职场文书
爱耳日活动总结
2014/04/30 职场文书
学校感恩教育活动总结
2014/07/07 职场文书
pytorch finetuning 自己的图片进行训练操作
2021/06/05 Python
如何使用分区处理MySQL的亿级数据优化
2021/06/18 MySQL
Python 发送SMTP邮件的简单教程
2021/06/24 Python
「偶像大师 MILLION LIVE!」七尾百合子手办开订
2022/03/21 日漫