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 相关文章推荐
IE 缓存策略的BUG的解决方法
Jul 21 Javascript
javascript编码的几个方法详细介绍
Jan 06 Javascript
jquery 实现窗口的最大化不论什么情况
Sep 03 Javascript
javascript面向对象快速入门实例
Jan 13 Javascript
js实现带圆角的两级导航菜单效果代码
Aug 24 Javascript
Javascript的表单验证-初识正则表达式
Mar 18 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
Feb 16 Javascript
jquery实现动态创建form并提交的方法示例
May 27 jQuery
了解Javascript中函数作为对象的魅力
Jun 19 Javascript
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
Jul 25 Javascript
JS字符串补全方法padStart()和padEnd()
May 27 Javascript
如何在JavaScript中等分数组的实现
Dec 13 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 取得瑞年与平年的天数的代码
2009/08/10 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
jQuery实用基础超详细介绍
2013/04/11 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
JS 屏蔽按键效果与改变按键效果的示例代码
2013/12/24 Javascript
Javascript实现多彩雪花从天降散落效果的方法
2015/02/02 Javascript
jQuery+jRange实现滑动选取数值范围特效
2015/03/14 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
2016/04/06 Javascript
移动端js图片查看器
2016/11/17 Javascript
Require.js的基本用法详解
2017/07/03 Javascript
js实现移动端轮播图效果
2020/12/09 Javascript
javascript实现文字无缝滚动效果
2017/08/26 Javascript
Vue 组件复用多次自定义参数操作
2020/07/27 Javascript
[01:59]DOTA2首部纪录片《Free to play》预告片
2014/03/12 DOTA
python提取字典key列表的方法
2015/07/11 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
2019/06/17 Python
python turtle工具绘制四叶草的实例分享
2020/02/14 Python
用pushplus+python监控亚马逊到货动态推送微信
2021/01/29 Python
python中os.remove()用法及注意事项
2021/01/31 Python
HTML文本属性&amp;颜色控制属性的实现
2019/12/17 HTML / CSS
世界上最大的网络主机公司:1&1
2016/10/12 全球购物
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
办公室主任职责范文
2013/11/08 职场文书
国培教师自我鉴定
2014/02/12 职场文书
运动会入场词60字
2014/02/15 职场文书
喷漆工的岗位职责
2014/03/17 职场文书
经贸日语专业个人求职信范文
2014/04/29 职场文书
城管大队整治方案
2014/05/06 职场文书
基层党组织整改方案
2014/10/25 职场文书
学生考试舞弊检讨书
2015/01/01 职场文书
学前班语言教学计划
2015/01/20 职场文书
公司欠款证明
2015/06/24 职场文书
莫言获奖感言(全文)
2015/07/31 职场文书
岗位聘任协议书
2015/09/21 职场文书
乡镇干部学习心得体会
2016/01/23 职场文书
2019年七夕情人节浪漫祝福语大全!
2019/08/08 职场文书