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 相关文章推荐
JQuery1.4+ Ajax IE8 内存泄漏问题
Oct 15 Javascript
浅析ajax请求json数据并用js解析(示例分析)
Jul 13 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
Aug 31 Javascript
JavaScript中SetInterval与setTimeout的用法详解
Nov 10 Javascript
老生常谈遮罩层 滚动条的问题
Apr 29 Javascript
详解Angular.js中$http拦截器的介绍及使用
Jul 04 Javascript
浅谈函数调用的不同方式,以及this的指向
Sep 17 Javascript
vue devtools的安装与使用教程
Aug 08 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
May 28 Javascript
js DOM的事件常见操作实例详解
Dec 16 Javascript
js代码实现轮播图
May 04 Javascript
使用jquery实现轮播图效果
Jan 02 jQuery
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函数篇之掌握ord()与chr()函数应用
2011/12/05 PHP
php中将汉字转换成拼音的函数代码
2012/09/08 PHP
php打包压缩文件之ZipArchive方法用法分析
2016/04/30 PHP
javascript 混合的构造函数和原型方式,动态原型方式
2009/12/07 Javascript
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
2016/08/19 Javascript
bootstrapValidator bootstrap-select验证不可用的解决办法
2017/01/11 Javascript
用director.js实现前端路由使用实例
2017/01/27 Javascript
JS函数节流和函数防抖问题分析
2017/12/18 Javascript
Vuex 快速入门(简单易懂)
2018/09/20 Javascript
JavaScript之实现一个简单的Vue示例
2019/01/17 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
微信浏览器左上角返回按钮监听的实现
2020/03/04 Javascript
vue 动态组件用法示例小结
2020/03/06 Javascript
Python三元运算实现方法
2015/01/12 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
python批量下载抖音视频
2019/06/17 Python
如何运行带参数的python脚本
2019/11/15 Python
NumPy中的维度Axis详解
2019/11/26 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
2015/01/01 HTML / CSS
英国的屈臣氏:Boots博姿
2017/12/23 全球购物
NFL加拿大官方网上商店:NHLShop.ca
2019/03/12 全球购物
学生档案自我鉴定
2013/10/07 职场文书
绿化先进工作者事迹材料
2014/01/30 职场文书
《草原的早晨》教学反思
2014/04/08 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
2014年社区综治工作总结
2014/11/17 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
毕业欢送会致辞
2015/07/29 职场文书
2016年公司新年寄语
2015/08/17 职场文书
解决Go gorm踩过的坑
2021/04/30 Golang
vue+echarts实现多条折线图
2022/03/21 Vue.js
全新239军机修复记
2022/04/05 无线电