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游戏之是男人就下100层代码打包
Nov 08 Javascript
IE下使用cloneNode注意事项分享
Nov 22 Javascript
javascript中获取元素标签中间的内容的实现方法
Oct 08 Javascript
正则表达式,替换所有HTML标签的简单实例
Nov 28 Javascript
浅析JS中常用类型转换及运算符表达式
Jul 23 Javascript
原生JS+Canvas实现五子棋游戏
May 28 Javascript
Bootstrap table使用方法汇总
Nov 17 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
May 16 Javascript
详解vue axios二次封装
Jul 22 Javascript
通过layer实现可输入的模态框的例子
Sep 27 Javascript
微信小程序绑定手机号获取验证码功能
Oct 22 Javascript
Openlayers实现扩散的动态点(水纹效果)
Aug 17 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
dedecms系统常用术语汇总
2007/04/03 PHP
php array_merge下进行数组合并的代码
2008/07/22 PHP
PHP设计模式之命令模式的深入解析
2013/06/13 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
JavaScript等比例缩放图片控制超出范围的图片
2013/08/06 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
BootStrap 智能表单实战系列(十)自动完成组件的支持
2016/06/13 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
2016/06/22 Javascript
JavaScript中const、var和let区别浅析
2016/10/11 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
关于Webpack dev server热加载失败的解决方法
2018/02/22 Javascript
Vue组件全局注册实现警告框的实例详解
2018/06/11 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
2019/12/16 Javascript
python书籍信息爬虫实例
2018/03/19 Python
python 实现提取log文件中的关键句子,并进行统计分析
2019/12/24 Python
windows上彻底删除jupyter notebook的实现
2020/04/13 Python
Jupyter notebook无法导入第三方模块的解决方式
2020/04/15 Python
python实现取余操作的简单实例
2020/08/16 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
2021/01/05 Python
python 数据类型强制转换的总结
2021/01/25 Python
装潢设计实习自我鉴定
2013/09/19 职场文书
机械专业毕业生推荐信范文
2013/11/25 职场文书
面试后感谢信怎么写
2014/02/01 职场文书
总经理文秘岗位职责
2014/02/03 职场文书
关于学习的演讲稿
2014/05/10 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
土木工程专业本科生求职信
2014/10/01 职场文书
2015年行政工作总结范文
2015/04/09 职场文书
2015年财务经理工作总结
2015/05/13 职场文书
开学典礼校长致辞
2015/07/29 职场文书
使用Html+Css实现简易导航栏功能(导航栏遇到鼠标切换背景颜色)
2021/04/07 HTML / CSS
Promise面试题详解之控制并发
2021/05/14 面试题
Python如何使用循环结构和分支结构
2022/04/13 Python
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript