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 快速结束当前正在执行的动画
Nov 20 Javascript
js获取字符串最后一位方法汇总
Nov 13 Javascript
基于jquery实现等比缩放图片
Dec 03 Javascript
javascript实现十秒钟后注册按钮可点击的方法
May 13 Javascript
三种带箭头提示框总结实例
Jun 14 Javascript
利用ES6语法重构React组件详解
Mar 02 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
Mar 10 Javascript
详解angular用$sce服务来过滤HTML标签
Apr 11 Javascript
react-native使用react-navigation进行页面跳转导航的示例
Sep 07 Javascript
JavaScript基于面向对象实现的猜拳游戏
Jan 03 Javascript
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
Nov 08 Javascript
小程序实现短信登录倒计时
Jul 12 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 函数中使用static的说明
2012/06/01 PHP
PHP基础之运算符的使用方法
2013/04/28 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
解决PHP里大量数据循环时内存耗尽的方法
2015/10/10 PHP
WordPress中注册菜单与调用菜单的方法详解
2015/12/18 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
使用typeof方法判断undefined类型
2014/09/09 Javascript
js判断一个字符串是否包含一个子串的方法
2015/01/26 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
js获取html的span标签的值方法(超简单)
2016/07/26 Javascript
JavaScript拖动层Div代码
2017/03/01 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
React路由管理之React Router总结
2018/05/10 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
2018/12/26 Javascript
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
jquery UI实现autocomplete在获取焦点时得到显示列表功能示例
2019/06/04 jQuery
vue图片加载失败时用默认图片替换的方法
2019/08/29 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
Python多线程下载文件的方法
2015/07/10 Python
深入解析Python小白学习【操作列表】
2019/03/23 Python
使用Matplotlib 绘制精美的数学图形例子
2019/12/13 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
2020/01/21 Python
PyTorch预训练Bert模型的示例
2020/11/17 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
船餐厅和泰晤士河餐饮游轮:Bateaux London
2018/03/19 全球购物
澳大利亚有机化妆品网上商店:The Well Store
2020/02/20 全球购物
物业管理员岗位职责范文
2013/11/25 职场文书
哈理工毕业生的求职信
2013/12/22 职场文书
经济信息系毕业生自荐信范文
2014/03/15 职场文书
2014年文学毕业生自我鉴定
2014/04/23 职场文书
政府法律服务方案
2014/06/14 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
幼儿园托班开学寄语(2015秋季)
2015/05/27 职场文书