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/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
Jul 14 Javascript
JavaScript 判断判断某个对象是Object还是一个Array
Jan 28 Javascript
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
Mar 11 Javascript
JS实现简单的右下角弹出提示窗口完整实例
Jun 21 Javascript
VueJS全面解析
Nov 10 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
Dec 12 Javascript
javascript获取以及设置光标位置
Feb 16 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
Mar 09 Javascript
node中Express 动态设置端口的方法
Aug 04 Javascript
jQuery实现手势解锁密码特效
Aug 14 jQuery
分享一款超好用的JavaScript 打包压缩工具
Apr 26 Javascript
vue style width a href动态拼接问题的解决
Aug 07 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
The specified CGI application misbehaved by not returning a complete set of HTTP headers
2011/03/31 PHP
ThinkPHP3.1基础知识快速入门
2014/06/19 PHP
PHP基本语法总结
2014/09/06 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
php简单统计中文个数的方法
2016/09/30 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
原创javascript小游戏实现代码
2010/08/19 Javascript
javascript中直接写php代码的方法
2013/07/31 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
JavaScript中的原型和继承详解(图文)
2014/07/18 Javascript
JavaScript中原型和原型链详解
2015/02/11 Javascript
TypeOf这些知识点你了解吗
2016/02/21 Javascript
jQuery插件简单学习实例教程
2016/07/01 Javascript
javascript设计模式之module(模块)模式
2016/08/19 Javascript
vue2的todolist入门小项目的详细解析
2017/05/11 Javascript
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
微信小程序自定义select下拉选项框组件的实现代码
2018/08/28 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
简述vue路由打开一个新的窗口的方法
2018/11/29 Javascript
vue-cli3单页构建大型项目方案
2020/04/07 Javascript
python基础教程之元组操作使用详解
2014/03/25 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
Python中pygal绘制雷达图代码分享
2017/12/07 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
python读取raw binary图片并提取统计信息的实例
2020/01/09 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
python/golang 删除链表中的元素
2020/09/14 Python
PyTorch中clone()、detach()及相关扩展详解
2020/12/09 Python
详解HTML5 canvas绘图基本使用方法
2018/01/29 HTML / CSS
2014基层党员批评与自我批评范文
2014/09/24 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
使用numpy实现矩阵的翻转(flip)与旋转
2021/06/03 Python
MongoDB连接数据库并创建数据等使用方法
2021/11/27 MongoDB
Pillow图像处理库安装及使用
2022/04/12 Python