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下有关dom以及xml节点访问兼容问题
Nov 26 Javascript
jQuery 动画弹出窗体支持多种展现方式
Apr 29 Javascript
动态添加删除表格行的js实现代码
Feb 28 Javascript
Javascript访问器属性实例分析
Dec 30 Javascript
jQuery滚动加载图片实现原理
Dec 14 Javascript
Bootstrap开关(switch)控件学习笔记分享
May 30 Javascript
jQuery 操作input中radio的技巧
Jul 18 Javascript
概述jQuery中的ajax方法
Dec 16 Javascript
微信小程序 详解Page中data数据操作和函数调用
Jan 12 Javascript
将jquery.qqFace.js表情转换成微信的字符码
Dec 01 jQuery
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
Aug 29 Javascript
vue指令v-html使用过滤器filters功能实例
Oct 25 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 getsiteurl()函数
2009/09/05 PHP
使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
2017/09/15 PHP
JavaScript实际应用:innerHTMl和确认提示的使用
2006/06/22 Javascript
两个Javascript小tip资料
2010/11/23 Javascript
JavaScript中的几个关键概念的理解-原型链的构建
2011/05/12 Javascript
js实现文本框只允许输入数字并限制数字大小的方法
2015/08/19 Javascript
livereload工具实现前端可视化开发【推荐】
2016/12/23 Javascript
jquery实现静态搜索功能(可输入搜索文字)
2017/03/28 jQuery
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
创建简单的node服务器实例(分享)
2017/06/23 Javascript
基于BootStrap实现简洁注册界面
2017/07/20 Javascript
Popup弹出框添加数据实现方法
2017/10/27 Javascript
vue 实现复制内容到粘贴板clipboard的方法
2018/03/17 Javascript
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
vue 中 beforeRouteEnter 死循环的问题
2019/04/23 Javascript
基于vue手写tree插件的那点事儿
2019/08/20 Javascript
vue实现文件上传读取及下载功能
2020/11/17 Javascript
JavaScript监听一个DOM元素大小变化
2020/04/26 Javascript
Python回调函数用法实例详解
2015/07/02 Python
Matplotlib 生成不同大小的subplots实例
2018/05/25 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
使用 Python 写一个简易的抽奖程序
2019/12/08 Python
Django框架教程之中间件MiddleWare浅析
2019/12/29 Python
python_array[0][0]与array[0,0]的区别详解
2020/02/18 Python
一文带你掌握Pyecharts地理数据可视化的方法
2021/02/06 Python
h5网页水印SDK的实现代码示例
2019/02/19 HTML / CSS
澳大利亚家具和家居用品在线商店:Interiors Online
2018/03/05 全球购物
物理系毕业生自荐信
2013/11/01 职场文书
人事专员岗位职责范本
2014/03/04 职场文书
幼儿园六一儿童节文艺汇演主持词
2014/03/21 职场文书
社区反邪教工作方案
2014/06/16 职场文书
餐饮服务食品安全责任书
2014/07/25 职场文书
政工例会汇报材料
2014/08/26 职场文书
三好学生事迹材料
2014/12/24 职场文书
单位同意报考证明
2015/06/17 职场文书
win10频率超出范围怎么办?win10老显示超出工作频率范围的解决方法
2022/07/07 数码科技