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图表动画插件Highcharts Examples
Apr 16 Javascript
Javascript中的isNaN函数使用说明
Nov 10 Javascript
浅谈jquery的html方法里包含特殊字符的处理
Nov 30 Javascript
JS中事件冒泡和事件捕获介绍
Dec 13 Javascript
轻松理解JavaScript之AJAX
Mar 15 Javascript
Textarea输入字数限制实例(兼容iOS&amp;安卓)
Jul 06 Javascript
详解vue 组件之间使用eventbus传值
Oct 25 Javascript
zTree 树插件实现全国五级地区点击后加载的示例
Feb 05 Javascript
一秒学会微信小程序制作table表格
Feb 14 Javascript
微信小程序的开发范式BeautyWe.js入门详解
Jul 10 Javascript
Openlayers实现距离面积测量
Sep 28 Javascript
详解Js模块化的作用原理和方案
Apr 29 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/02/21 PHP
PHP Directory 函数的详解
2013/03/07 PHP
PHP读取word文档的方法分析【基于COM组件】
2017/08/01 PHP
TP5.0框架实现无限极回复功能的方法分析
2019/05/04 PHP
php+js实现倒计时功能
2014/06/02 Javascript
jQuery仅用3行代码实现的显示与隐藏功能完整实例
2015/10/08 Javascript
JQuery中Ajax()的data参数类型实例分析
2015/12/15 Javascript
微信小程序之拖拽排序(代码分享)
2017/01/21 Javascript
js实现带简单弹性运动的导航条
2017/02/22 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
2017/07/28 Javascript
js实现会跳动的日历效果(完整实例)
2017/10/18 Javascript
微信小程序canvas实现刮刮乐效果
2018/07/09 Javascript
vue中datepicker的使用教程实例代码详解
2019/07/08 Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
2019/11/25 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
Python写的服务监控程序实例
2015/01/31 Python
在Mac OS上搭建Python的开发环境
2015/12/24 Python
python实现闹钟定时播放音乐功能
2018/01/25 Python
Python 多维List创建的问题小结
2019/01/18 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
Falsk 与 Django 过滤器的使用与区别详解
2019/06/04 Python
python获取array中指定元素的示例
2019/11/26 Python
Python如何使用paramiko模块连接linux
2020/03/18 Python
关于HTML5语义标签的实践(blog页面)
2016/07/12 HTML / CSS
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
KIEHL’S科颜氏官方旗舰店:源自美国的顶级护肤品牌
2018/06/07 全球购物
外语专业毕业生自我评价分享
2013/10/05 职场文书
学生个人的自我评价分享
2013/11/05 职场文书
护理专业大学生自我推荐信
2014/01/25 职场文书
委托协议书范本
2014/04/22 职场文书
竞选班干部演讲稿600字
2014/08/20 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
停发工资证明范本
2015/06/12 职场文书
如何在CocosCreator里画个炫酷的雷达图
2021/04/16 Javascript
vue如何使用模拟的json数据查看效果
2022/03/31 Vue.js