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函数、方法、对象代码
Oct 29 Javascript
Javascript 原型和继承(Prototypes and Inheritance)
Apr 01 Javascript
js的alert样式如何更改如背景颜色
Jan 22 Javascript
JS实现从网页顶部掉下弹出层效果的方法
Aug 06 Javascript
新闻上下滚动jquery 超简洁(必看篇)
Jan 21 Javascript
Node.js创建HTTP文件服务器的使用示例
May 11 Javascript
详解JavaScript 为什么要有 Symbol 类型?
Apr 03 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
May 12 Javascript
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
Aug 10 Javascript
Javascript类型判断相关例题及解析
Aug 26 Javascript
开发一个封装iframe的vue组件
Mar 29 Vue.js
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
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循环跳出的问题
2013/07/01 PHP
php中get_cfg_var()和ini_get()的用法及区别
2015/03/04 PHP
php检测url是否存在的方法
2015/04/14 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
PHP+MySQL实现的简单投票系统实例
2016/02/24 PHP
用Javascript做flash做的事..才完成的一个类.Auntion Action var 0.1
2007/02/23 Javascript
浅析javascript闭包 实例分析
2010/12/25 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
jquery实现标签上移、下移、置顶
2015/04/26 Javascript
javascript中字体浮动效果的简单实例演示
2015/11/18 Javascript
JS实现设置ff与ie元素绝对位置的方法
2016/03/08 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
2016/08/04 Javascript
jquery实现手机端单店铺购物车结算删除功能
2017/02/22 Javascript
vue组件如何被其他项目引用
2017/04/13 Javascript
Mongoose实现虚拟字段查询的方法详解
2017/08/15 Javascript
详解webpack loader和plugin编写
2018/10/12 Javascript
详解如何用typescript开发koa2的二三事
2018/11/13 Javascript
VUE中使用MUI方法
2019/02/12 Javascript
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
Tensorflow分类器项目自定义数据读入的实现
2019/02/05 Python
浅谈Python type的使用
2019/11/19 Python
解决python-docx打包之后找不到default.docx的问题
2020/02/13 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
python rsa-oaep加密的示例代码
2020/09/23 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
澳大利亚香水在线:Price Rite Mart
2017/12/28 全球购物
澳大利亚婴儿喂养品牌:Cherub Baby
2018/11/01 全球购物
大学生自我鉴定范文模板
2014/01/21 职场文书
会议主持词
2014/03/17 职场文书
活动倡议书范文
2014/05/13 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL
讲解Python实例练习逆序输出字符串
2022/05/06 Python