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 EasyUI API 中文文档 - TreeGrid 树表格使用介绍
Nov 21 Javascript
JS模块与命名空间的介绍
Mar 22 Javascript
js二级地域选择的实现方法
Jun 17 Javascript
网页广告中JS代码的信息监听示例
Apr 02 Javascript
javascript自动生成包含数字与字符的随机字符串
Feb 09 Javascript
jQuery.extend 函数及用法详细
Sep 06 Javascript
jquery实现九宫格大转盘抽奖
Nov 13 Javascript
JS中artdialog弹出框控件之提交表单思路详解
Apr 18 Javascript
jQuery使用$.each遍历json数组的简单实现方法
Apr 18 Javascript
angular-ngSanitize模块-$sanitize服务详解
Jun 13 Javascript
vue elementUI tree树形控件获取父节点ID的实例
Sep 12 Javascript
js实现滑动进度条效果
Aug 21 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
3.从实例开始
2006/10/09 PHP
最常用的8款PHP调试工具
2014/07/06 PHP
php实现字符串首字母大写和单词首字母大写的方法
2015/03/14 PHP
Yii数据库缓存实例分析
2016/03/29 PHP
CodeIgniter框架数据库基本操作示例
2018/05/24 PHP
Javascript 错误处理的几种方法
2009/06/13 Javascript
javascript JSON操作入门实例
2010/04/16 Javascript
用javascript删除当前行,添加行(示例代码)
2013/11/25 Javascript
用模版生成HTML的的框架jquery.tmpl使用详解
2015/01/07 Javascript
JavaScript 学习笔记之数据类型
2015/01/14 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
Jquery操作Ajax方法小结
2015/11/29 Javascript
javascript实现unicode与ASCII相互转换的方法
2015/12/10 Javascript
用JS动态改变表单form里的action值属性的两种方法
2016/05/25 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
js窗口震动小程序分享
2016/11/28 Javascript
原生javascript实现图片放大镜效果
2017/01/18 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
[09:37]2018DOTA2国际邀请赛寻真——不懈追梦的Team Serenity
2018/08/13 DOTA
初学python的操作难点总结(新手必看篇)
2017/08/03 Python
Python合并多个Excel数据的方法
2018/07/16 Python
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
Python生成指定数量的优惠码实操内容
2019/06/18 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
2019/07/11 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
windows系统Tensorflow2.x简单安装记录(图文)
2021/01/18 Python
高级Java程序员面试要点
2013/08/02 面试题
护理工作感言
2014/01/16 职场文书
二手房买卖协议书
2014/04/10 职场文书
2015年社会治安综合治理工作总结
2015/04/10 职场文书
回门宴新娘答谢词
2015/09/29 职场文书
Java日常练习题,每天进步一点点(38)
2021/07/26 Java/Android
Mysql如何实现不存在则插入,存在则更新
2022/03/25 MySQL
三种方式清除vue路由跳转router-link的历史记录
2022/04/10 Vue.js
HTML5之高度塌陷问题的解决
2022/06/01 HTML / CSS