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 select下拉框操作的一些说明
Apr 02 Javascript
基于JQuery的日期联动实现代码
Feb 24 Javascript
jquery检测input checked 控件是否被选中的方法
Mar 26 Javascript
jquery彩色投票进度条简单实例演示
Jul 23 Javascript
jQuery版本升级踩坑大全
Jan 12 Javascript
JS高级运动实例分析
Dec 20 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
Jan 11 Javascript
详解用vue-cli来搭建vue项目和webpack
Apr 20 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
Apr 11 Javascript
Vue的路由及路由钩子函数的实现
Jul 02 Javascript
jQuery加PHP实现图片上传并提交的示例代码
Jul 16 jQuery
原生Js 实现的简单无缝滚动轮播图的示例代码
May 10 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
destoon找回管理员密码的方法
2014/06/21 PHP
PHP Swoole异步Redis客户端实现方法示例
2019/10/24 PHP
查询绑定数据岛的表格中的文本并修改显示方式的js代码
2009/12/15 Javascript
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
javascript作用域、作用域链(菜鸟必看)
2016/06/16 Javascript
很棒的Bootstrap选项卡切换效果
2016/07/01 Javascript
ReactNative页面跳转实例代码
2016/09/27 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
node.js操作mongodb简单示例分享
2017/05/25 Javascript
简述jQuery Easyui一些用法
2017/08/01 jQuery
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
Vue+Koa2 打包后进行线上部署的教程详解
2019/07/31 Javascript
基于纯JS实现多张图片的懒加载Lazy过程解析
2019/10/14 Javascript
js面试题之异步问题的深入理解
2020/09/20 Javascript
[06:50]DSPL次级职业联赛十强晋级之路
2014/11/18 DOTA
Python自动重试HTTP连接装饰器
2015/04/28 Python
Python设计模式之抽象工厂模式原理与用法详解
2019/01/15 Python
kali中python版本的切换方法
2019/07/11 Python
python二维键值数组生成转json的例子
2019/12/06 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
完美解决ARIMA模型中plot_acf画不出图的问题
2020/06/04 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
2020/06/23 Python
意大利香水和化妆品购物网站:Parfimo.it
2019/10/06 全球购物
西部世纪面试题
2014/12/05 面试题
计算机应用专业推荐信
2013/11/13 职场文书
财政局长自荐信范文
2013/12/22 职场文书
艾滋病宣传活动总结
2014/05/08 职场文书
2014年学习全国道德模范事迹思想汇报
2014/09/15 职场文书
群众路线教育查摆剖析材料
2014/10/10 职场文书
明确岗位职责
2015/02/14 职场文书
二手房购房意向书
2015/05/09 职场文书
中学总务处工作总结
2015/08/12 职场文书
vue里使用create, mounted调用方法
2022/04/26 Vue.js