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 相关文章推荐
xml分页+ajax请求数据源+dom取结果实例代码
Oct 31 Javascript
js数组的操作指南
Dec 28 Javascript
javascript实现youku的视频代码自适应宽度
May 25 Javascript
JS拖拽组件学习使用
Jan 19 Javascript
AngularJS 如何在控制台进行错误调试
Jun 07 Javascript
Angular2 (RC5) 路由与导航详解
Sep 21 Javascript
Javascript基础回顾之(二) js作用域
Jan 31 Javascript
iview中Select 选择器多选校验方法
Mar 15 Javascript
react-native封装插件swiper的使用方法
Mar 20 Javascript
js实现小时钟效果
Mar 25 Javascript
JavaScript实现商品评价五星好评
Nov 30 Javascript
JavaScript实现九宫格拖拽效果
Jun 28 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
Trying to clone an uncloneable object of class Imagic的解决方法
2012/01/11 PHP
php获取文件夹路径内的图片以及分页显示示例
2014/03/11 PHP
PHP的Yii框架的常用日志操作总结
2015/12/08 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
PHP7 参数处理机制修改
2021/03/09 PHP
js数组去重的常用方法总结
2014/01/24 Javascript
AngularJS实现数据列表的增加、删除和上移下移等功能实例
2016/09/05 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
2017/05/03 Javascript
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
在vue中添加Echarts图表的基本使用教程
2017/11/22 Javascript
vue-cli webpack 引入jquery的方法
2018/01/10 jQuery
vue 实现剪裁图片并上传服务器功能
2018/03/01 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
vue自定义指令之面板拖拽的实现
2019/04/14 Javascript
实用Javascript调试技巧分享(小结)
2019/06/18 Javascript
vue中使用带隐藏文本信息的图片、图片水印的方法
2020/04/24 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
Python2.7下安装Scrapy框架步骤教程
2017/12/22 Python
Python爬虫基础之XPath语法与lxml库的用法详解
2018/09/13 Python
pycharm 实现显示project 选项卡的方法
2019/01/17 Python
Python求正态分布曲线下面积实例
2019/11/20 Python
python 实现屏幕录制示例
2019/12/23 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
2021/02/03 Python
canvas如何实现多张图片编辑的图片编辑器
2020/03/10 HTML / CSS
TripAdvisor瑞典:全球领先的旅游网站
2017/12/11 全球购物
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
2014年迎新年活动方案
2014/02/19 职场文书
化学工程专业求职信
2014/08/10 职场文书
农村党员对照检查材料
2014/09/24 职场文书
党员民主生活会对照检查材料思想汇报
2014/09/28 职场文书
教师节寄语2015
2015/03/23 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书
如何用threejs实现实时多边形折射
2021/05/07 Javascript