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 相关文章推荐
ext监听事件方法[初级篇]
Apr 27 Javascript
javascript用户注册提示效果的简单实例
Aug 17 Javascript
jquery datatable后台封装数据示例代码
Aug 07 Javascript
jQuery调用ajax请求的常见方法汇总
Mar 24 Javascript
浅谈javascript的call()、apply()、bind()的用法
Feb 21 Javascript
jquery通过name属性取值的简单实现方法
Jun 20 Javascript
关于JSON与JSONP简单总结
Aug 16 Javascript
js实现下拉菜单效果
Mar 01 Javascript
webpack 2.x配置reactjs基本开发环境详解
Aug 08 Javascript
vue点击自增和求和的实例代码
Nov 06 Javascript
微信浏览器下拉黑边解决方案 wScroollFix
Jan 21 Javascript
js实现3D旋转效果
Aug 18 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连接access数据库方法
2013/11/11 PHP
php获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
php使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
2015/03/18 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2016/01/12 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
highchart数据源纵轴json内的值必须是int(详解)
2017/02/20 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
IE Firefox 使用自定义标签的区别
2009/10/15 Javascript
JavaScript Event学习补遗 addEventSimple
2010/02/11 Javascript
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
js实现防止被iframe的方法
2015/07/03 Javascript
js学习总结_选项卡封装(实例讲解)
2017/07/13 Javascript
使用mint-ui开发项目的一些心得(分享)
2017/09/07 Javascript
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
2017/09/28 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
2019/06/06 jQuery
原生js实现下拉选项卡
2019/11/27 Javascript
Webpack设置环境变量的一些误区详解
2019/12/19 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
2021/01/07 Javascript
教大家使用Python SqlAlchemy
2016/02/12 Python
Python处理XML格式数据的方法详解
2017/03/21 Python
100行python代码实现跳一跳辅助程序
2018/01/15 Python
Python应用领域和就业形势分析总结
2019/05/14 Python
python 动态调用函数实例解析
2019/10/21 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
如何学习Python time模块
2020/06/03 Python
Python 操作SQLite数据库的示例
2020/10/16 Python
HTML5实现移动端弹幕动画效果
2019/08/01 HTML / CSS
有趣的睡衣和礼物:LazyOne
2019/11/27 全球购物
车位出租协议书范本
2016/03/19 职场文书
python中pymysql包操作数据库方法
2022/04/19 Python
css让页脚保持在底部位置的四种方案
2022/07/23 HTML / CSS