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 相关文章推荐
用dom+xhtml+css制作的一个相册效果代码打包下载
Jan 24 Javascript
JavaScript中继承的一些示例方法与属性参考
Aug 07 Javascript
js加载之使用DOM方法动态加载Javascript文件
Nov 08 Javascript
js判断undefined类型示例代码
Feb 10 Javascript
jQuery实现炫酷的鼠标轨迹特效
Feb 01 Javascript
谈谈我对JavaScript中typeof和instanceof的深入理解
Dec 25 Javascript
DropDownList实现可输入可选择(两种版本可选)
Dec 07 Javascript
微信小程序如何获取用户手机号
Jan 26 Javascript
Vue弹出菜单功能的实现代码
Sep 12 Javascript
原生js添加一个或多个类名的方法分析
Jul 30 Javascript
Element ui 下拉多选时新增一个选择所有的选项
Aug 21 Javascript
如何实现vue的tree组件
Dec 03 Vue.js
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 文章中的远程图片采集到本地的代码
2009/07/30 PHP
PHP 长文章分页函数 带使用方法,不会分割段落,翻页在底部
2009/10/22 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
java模拟PHP的pack和unpack类
2016/04/13 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
提取字符串中年月日的函数代码
2013/11/05 Javascript
DIV始终居中的js代码
2014/02/17 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
jQuery模拟黑客帝国矩阵效果实例
2015/06/28 Javascript
Angular2  NgModule 模块详解
2016/10/19 Javascript
Jquery UI实现一次拖拽多个选中的元素操作
2020/12/01 Javascript
修改ligerui 默认确认按钮的方法
2016/12/27 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
2018/12/02 Javascript
vue各种事件监听实例(小结)
2020/06/24 Javascript
详解Python中的__new__、__init__、__call__三个特殊方法
2016/06/02 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
Python基础教程之if判断,while循环,循环嵌套
2019/04/25 Python
浅谈Python中函数的定义及其调用方法
2019/07/19 Python
Python学习笔记之Django创建第一个数据库模型的方法
2019/08/07 Python
Python Django框架模板渲染功能示例
2019/11/08 Python
Python SQLAlchemy入门教程(基本用法)
2019/11/11 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
LookFantastic丹麦:英国美容护肤精品在线商城
2016/08/18 全球购物
英国最大的电脑零售连锁店集团:PC World
2016/10/10 全球购物
Yankee Candle官网:美国最畅销蜡烛品牌之一
2020/01/05 全球购物
校班主任推荐信范文
2013/12/03 职场文书
工商管理实习生自我鉴定范文
2013/12/18 职场文书
护理工作感言
2014/01/16 职场文书
私人房屋买卖协议书
2014/10/04 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
请客吃饭开场白
2015/06/01 职场文书
教师节领导致辞
2015/07/29 职场文书
职场新人知识:如何制定一份合理的工作计划?
2019/09/11 职场文书