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 相关文章推荐
javascript 面向对象思想 附源码
Jul 07 Javascript
新鲜出炉的js tips提示效果
Apr 03 Javascript
js对象关系图 方便dom操作
Mar 18 Javascript
js实现全屏漂浮广告移入光标停止移动
Dec 02 Javascript
jQuery的live()方法对hover事件的处理示例
Feb 27 Javascript
Node.js中child_process实现多进程
Feb 03 Javascript
js密码强度检测
Jan 07 Javascript
js截取字符串功能的实现方法
Sep 27 Javascript
JS实现li标签的删除
Apr 12 Javascript
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
Jun 24 Javascript
vscode 插件开发 + vue的操作方法
Jun 05 Javascript
openlayers实现地图弹窗
Sep 25 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
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
2006/10/09 PHP
php模拟socket一次连接,多次发送数据的实现代码
2011/07/26 PHP
异步加载技术实现当滚动条到最底部的瀑布流效果
2014/09/16 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
Yii2简单实现给表单添加验证码的方法
2016/07/18 PHP
从零开始学习jQuery (六) jquery中的AJAX使用
2011/02/23 Javascript
Javascript Memoizer浅析
2014/10/16 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
微信小程序 前端源码逻辑和工作流详解
2016/10/08 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
2016/11/29 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
详解webpack es6 to es5支持配置
2017/05/04 Javascript
javascript简单链式调用案例分析
2017/05/10 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
2018/07/31 Javascript
electron中使用bootstrap的示例代码
2018/11/06 Javascript
node.js实现带进度条的多文件上传
2020/03/27 Javascript
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
[03:42]2014DOTA2西雅图国际邀请赛 Navi战队巡礼
2014/07/07 DOTA
[08:07]DOTA2每周TOP10 精彩击杀集锦vol.8
2014/06/25 DOTA
Django1.3添加app提示模块不存在的解决方法
2014/08/26 Python
解决csv.writer写入文件有多余的空行问题
2018/07/06 Python
在Python dataframe中出生日期转化为年龄的实现方法
2018/10/20 Python
pygame实现俄罗斯方块游戏(AI篇2)
2019/10/29 Python
如何基于python操作excel并获取内容
2019/12/24 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
美国知名艺术画网站:Art.com
2017/02/09 全球购物
英国在线药房:Express Chemist
2019/03/28 全球购物
aden + anais英国官网:美国婴儿贴身用品品牌
2019/09/08 全球购物
简历自荐信
2013/12/02 职场文书
协议书模板
2014/04/23 职场文书
大学新生军训方案
2014/05/03 职场文书
中华美德颂演讲稿
2014/05/20 职场文书
法人身份证明书
2015/06/18 职场文书
详解如何在Canvas中添加事件的方法
2021/04/17 Javascript