JavaScript中去掉数组中的重复值的实现方法


Posted in Javascript onAugust 03, 2011
题目:要求写一个函数,去掉给定数组中的重复值。 
如: 
传入数组 a = [0, 8, 5, 4, 78, 8, 90, 4, 'a', 'b', 'a']; 
要求返回:[0,4,5,8,78,90,a,b]

对于这个题目,在面试之后也想了好多次,不过一直没能想出一个时间复杂度较低的方法。昨天下午在宿舍看《JavaScript语言精粹》看到一个书中的一段代码有所触发,于是在jsfiddle上测试了,成功。代码如下(完整版参见jsfiddle)
var getNR = function(src) { 
src = src || []; 
var res = {}; 
var curr = []; 
var i, j = 0,temp, name; 
for (i = 0; i < src.length; i++) { 
temp = src[i]; 
if (res[temp]) { 
//do noting 
} else { 
res[temp] = 1; 
} 
} 
for (name in res) { 
if (res.hasOwnProperty(name)) { 
curr[j++] = name; 
} 
} 
return curr; 
};

总结一下我的思路:
思路一:将目标数组进行排序,然后依序删除重复的数组,但这样在删除重复元素的同时也改变数组原有元素的属性,明显是不符合要求的,del。
思路二:新建一个数组b,将a中的元素push到b中,但是在push之前检查该元素是否存在。这个时间复杂度是n*n,最简单也是最笨的办法。
思路三:跟思路二类似,不过充分利用了js对象的属性,新建一个空对象,将a中的元素作为属性添加到该对象中,在添加之前检测该属性是否已存在。全部添加完后将该对象的属性依序放到数组中,return
美团面试的题目中有一道这个题目的变种:
要求在Array类上添加一个方法,对于任意数组调用该方法后,去除该数组中的重复元素。
这个变种题考查的知识点多了些,还包括原型,this的理解等。
Javascript 相关文章推荐
Javascript document.referrer判断访客来源网址
May 15 Javascript
Dojo 学习要点
Sep 03 Javascript
JS获取随机数函数可自定义最小值最大值
May 08 Javascript
express的中间件bodyParser详解
Dec 04 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
Apr 14 Javascript
探索angularjs+requirejs全面实现按需加载的套路
Feb 26 Javascript
js简单实现调整网页字体大小的方法
Jul 23 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
Sep 27 Javascript
Bootstrap基本样式学习笔记之表单(3)
Dec 07 Javascript
Vue代码整洁之去重方法整理
Aug 06 Javascript
Vue项目打包编译优化方案
Sep 16 Javascript
解决antd Form 表单校验方法无响应的问题
Oct 27 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
基于jQuery替换table中的内容并显示进度条的代码
Aug 02 #Javascript
You might like
PHP 数组排序方法总结 推荐收藏
2010/06/30 PHP
apache+php+mysql安装配置方法小结
2010/08/01 PHP
PHP在字符断点处截断文字的实现代码
2011/04/21 PHP
php实现webservice实例
2014/11/06 PHP
php常见的魔术方法详解
2014/12/25 PHP
深入浅析php json 格式控制
2015/12/24 PHP
extjs 的权限问题 要求控制的对象是 菜单,按钮,URL
2010/03/09 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
jQuery实现菜单式图片滑动切换
2015/03/14 Javascript
js+HTML5实现视频截图的方法
2015/06/16 Javascript
jQuery中extend函数详解
2015/07/13 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
jquery.serialize() 函数语法及简单实例
2016/07/08 Javascript
jquery滚动条插件slimScroll使用方法
2017/02/09 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
vue不通过路由直接获取url中参数的方法示例
2017/08/24 Javascript
AngularJS实现的锚点楼层跳转功能示例
2018/01/02 Javascript
Hexo已经看腻了,来手把手教你使用VuePress搭建个人博客
2018/04/26 Javascript
angular 内存溢出的问题解决
2018/07/12 Javascript
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
js校验开始时间和结束时间
2020/05/26 Javascript
python中lambda()的用法
2017/11/16 Python
Python爬虫文件下载图文教程
2018/12/23 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
python实现的多任务版udp聊天器功能案例
2019/11/13 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
python制作一个简单的gui 数据库查询界面
2020/11/19 Python
匈牙利墨盒和碳粉购买网站:CDRmarket
2018/04/14 全球购物
运动会广播稿300字
2014/01/10 职场文书
市场营销工作计划书
2014/09/15 职场文书
2014年大学生职业规划书:未来不是梦,只要勇敢冲!
2014/09/22 职场文书
幽灵公主观后感
2015/06/09 职场文书
Filebeat 采集 Nginx 日志的方法
2021/03/31 Servers