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 相关文章推荐
json格式化/压缩工具 Chrome插件扩展版
May 25 Javascript
Extjs EditorGridPanel中ComboBox列的显示问题
Jul 04 Javascript
js调用webservice中的方法实现思路及代码
Feb 25 Javascript
浅谈JavaScript中指针和地址
Jul 26 Javascript
js仿百度切换皮肤功能(html+css)
Jul 10 Javascript
详解vue.js的devtools安装
May 26 Javascript
jQuery实现对网页节点的增删改查功能示例
Sep 18 jQuery
浅谈关于iview表单验证的问题
Sep 29 Javascript
JS实现的碰撞检测与周期移动完整示例
Sep 02 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
May 19 jQuery
Js利用正则表达式去除字符串的中括号
Nov 23 Javascript
JS算法教程之字符串去重与字符串反转
Dec 15 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
BOOM vs RR BO5 第三场 2.14
2021/03/10 DOTA
出现“不能执行已释放的Script代码”错误的原因及解决办法
2007/08/29 Javascript
jQuery 工具函数学习资料
2010/04/29 Javascript
window.parent与window.openner区别介绍
2012/04/12 Javascript
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
sliderToggle在写jquery的计时器setTimeouter中不生效
2014/05/26 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
Bootstrap3学习笔记(二)之排版
2016/05/20 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
BackBone及其实例探究_动力节点Java学院整理
2017/07/14 Javascript
利用JavaScript实现栈的数据结构示例代码
2017/08/02 Javascript
vue数字类型过滤器的示例代码
2017/09/07 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
解决layUI的页面显示不全的问题
2019/09/20 Javascript
vue 实现移动端键盘搜索事件监听
2019/11/06 Javascript
用python实现百度翻译的示例代码
2018/03/09 Python
解决pycharm工程启动卡住没反应的问题
2019/01/19 Python
在Python中,不用while和for循环遍历列表的实例
2019/02/20 Python
Python中py文件转换成exe可执行文件的方法
2019/06/14 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
如何使用pandas读取txt文件中指定的列(有无标题)
2020/03/05 Python
如何使用PyCharm引入需要使用的包的方法
2020/09/22 Python
Django跨域请求原理及实现代码
2020/11/14 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
selenium+超级鹰实现模拟登录12306
2021/01/24 Python
智能旅行箱:Horizn Studios
2018/04/30 全球购物
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
在SQL Server中创建数据库主要有那种方式
2013/09/10 面试题
升学宴答谢词
2015/01/05 职场文书
异地恋情人节寄语
2015/02/28 职场文书
催款函范文
2015/06/24 职场文书
描写九月优美句子(39条)
2019/09/11 职场文书
用python修改excel表某一列内容的操作方法
2021/06/11 Python
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
2022/06/28 Oracle