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 相关文章推荐
JS 文件本身编码转换 图文教程
Oct 12 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
Apr 08 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
Dec 29 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
Jun 11 Javascript
prototype框架中美元符号$用法分析
Jan 22 Javascript
Ztree新增角色和编辑角色回显问题的解决
Oct 25 Javascript
深入理解jquery的$.extend()、$.fn和$.fn.extend()
Jul 08 jQuery
three.js实现3D模型展示的示例代码
Dec 31 Javascript
详解Angular如何正确的操作DOM
Jul 06 Javascript
vue 使用vue-i18n做全局中英文切换的方法
Oct 29 Javascript
JavaScript实现HTML导航栏下拉菜单
Nov 25 Javascript
vue实现登录、注册、退出、跳转等功能
Dec 23 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生成静态页面详解
2006/12/05 PHP
php中通过curl smtp发送邮件
2012/06/05 PHP
深入解析PHP的Yii框架中的缓存功能
2016/03/29 PHP
实例讲解PHP表单验证功能
2019/02/15 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
JQuery小知识
2010/10/15 Javascript
JS维吉尼亚密码算法实现代码
2010/11/09 Javascript
判断JS对象是否拥有某种属性的两种方式
2013/12/02 Javascript
js实现飞入星星特效代码
2014/10/17 Javascript
JavaScript中的类数组对象介绍
2014/12/30 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
基于JS判断iframe是否加载成功的方法(多种浏览器)
2016/05/13 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
2016/08/09 Javascript
javascript设计模式之module(模块)模式
2016/08/19 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
详解Angular 4.x Injector
2017/05/04 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
详解vue-cli 2.0配置文件(小结)
2019/01/14 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
2019/06/18 jQuery
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
js实现微信聊天界面
2020/08/09 Javascript
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
在Python中关于中文编码问题的处理建议
2015/04/08 Python
Python使用lxml模块和Requests模块抓取HTML页面的教程
2016/05/16 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
2020/04/24 Python
Python绘制K线图之可视化神器pyecharts的使用
2021/03/02 Python
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
100%羊绒:NakedCashmere
2020/08/26 全球购物
公司联欢晚会主持词
2014/03/22 职场文书
不错的求职信范文
2014/07/20 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
2015年销售人员工作总结
2015/04/07 职场文书