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 22 Javascript
异步安全加载javascript文件的方法
Jul 21 Javascript
angular forEach方法遍历源码解读
Jan 25 Javascript
AngularJS中使用three.js的实例详解
Jul 21 Javascript
Vue中的异步组件函数实现代码
Jul 20 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
Sep 21 Javascript
使用pkg打包Node.js应用的方法步骤
Oct 19 Javascript
深入理解Node内建模块和对象
Mar 12 Javascript
深入解析vue 源码目录及构建过程分析
Apr 24 Javascript
Vue+Express实现登录注销功能的实例代码
May 05 Javascript
JavaScript运动原理基础知识详解
Apr 02 Javascript
微信小程序 button样式设置为图片的方法
Jun 19 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异步调用socket实现代码
2012/01/12 PHP
PHP备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
PHP加Nginx实现动态裁剪图片方案
2014/03/10 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
javascript 字符 Escape,encodeURI,encodeURIComponent
2009/07/09 Javascript
Js冒泡事件详解及阻止示例
2014/03/21 Javascript
javascript拖拽应用实例
2016/03/25 Javascript
基于JavaScript实现回到页面顶部动画代码
2016/05/24 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
jQuery简单实现上下,左右滑动的方法
2016/06/01 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
2017/01/04 Javascript
React操作真实DOM实现动态吸底部的示例
2017/10/23 Javascript
详解vue-cli中使用rem,vue自适应
2019/05/06 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
浅谈JSON5解决了JSON的两大痛点
2020/12/14 Javascript
Python 基础教程之str和repr的详解
2017/08/20 Python
Python使用while循环花式打印乘法表
2019/01/28 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
解决django服务器重启端口被占用的问题
2019/07/26 Python
关于pytorch多GPU训练实例与性能对比分析
2019/08/19 Python
python pygame实现挡板弹球游戏
2019/11/25 Python
Jupyter notebook如何修改平台字体
2020/05/13 Python
详解CSS3中@media的实际使用
2015/08/04 HTML / CSS
印尼在线精品店:Berrybenka.com
2016/10/22 全球购物
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
Nike挪威官网:Nike.com (NO)
2018/11/26 全球购物
商务英语本科生的自我评价分享
2013/11/15 职场文书
中专药剂专业应届毕的自我评价
2013/12/27 职场文书
业绩考核岗位职责
2014/02/01 职场文书
房地产资料员岗位职责
2014/07/02 职场文书
班子群众路线教育实践个人对照检查材料思想汇报
2014/09/30 职场文书
学校党的群众路线教育实践活动整改措施
2014/10/25 职场文书
嘉宾邀请函
2015/01/31 职场文书
中国古风插画师排行榜:夏达第一,第三是阴阳师姑获鸟皮肤创作者
2022/03/18 国漫