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 常用函数
Dec 30 Javascript
jQuery表单验证插件formValidator(改进版)
Feb 03 Javascript
javascript学习笔记(十) js对象 继承
Jun 19 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
Nov 25 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
Jan 02 Javascript
jQuery制作简单柱状图实例
Jan 28 Javascript
javascript文本框内输入文字倒计数的方法
Feb 24 Javascript
省市区三级联动下拉框菜单javascript版
Aug 11 Javascript
安装Node.js并启动本地服务的操作教程
May 12 Javascript
javascript实现前端成语点击验证
Jun 24 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
Oct 28 Javascript
JavaScript事件概念详解(区分静态注册和动态注册)
Feb 05 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
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
smarty模板引擎基础知识入门
2015/03/30 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
通用javascript脚本函数库 方便开发
2009/10/13 Javascript
JS TextArea字符串长度限制代码集合
2012/10/31 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
2014/06/09 Javascript
非常优秀的JS图片轮播插件Swiper的用法
2017/01/03 Javascript
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
ionic 自定义弹框效果
2017/06/27 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
Node.js中sequelize时区的配置方法
2017/12/10 Javascript
如何利用@angular/cli V6.0直接开发PWA应用详解
2018/05/06 Javascript
JS监听组合按键思路及实现过程
2020/04/17 Javascript
[02:36]DOTA2英雄基础教程 斯拉克
2013/11/29 DOTA
[01:21]2018DOTA2亚洲邀请赛4.5采访 打DOTA2也能有女朋友?
2018/04/06 DOTA
Python编写的com组件发生R6034错误的原因与解决办法
2013/04/01 Python
Python中elasticsearch插入和更新数据的实现方法
2018/04/01 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
python读取各种文件数据方法解析
2018/12/29 Python
Python实现定时自动关闭的tkinter窗口方法
2019/02/16 Python
python实现高斯判别分析算法的例子
2019/12/09 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
深入解读CSS3中transform变换模型的渲染
2016/05/27 HTML / CSS
四川internet信息高速公路(C#)笔试题
2012/02/29 面试题
元旦晚会感言
2014/03/12 职场文书
《画风》教学反思
2014/04/16 职场文书
共产党员公开承诺践诺书
2014/05/28 职场文书
审计班子对照检查材料
2014/08/27 职场文书
敬老月活动总结
2014/08/28 职场文书
2014年幼儿园学期工作总结
2014/12/05 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
工作自我推荐信范文
2015/03/25 职场文书
酒店前台接待岗位职责
2015/04/02 职场文书
nginx 反向代理之 proxy_pass的实现
2021/03/31 Servers
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js