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 HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
Jun 02 Javascript
跟着JQuery API学Jquery 之三 筛选
Apr 09 Javascript
基于jquery的图片轮播 tab切换组件
Jul 19 Javascript
node.js中的fs.closeSync方法使用说明
Dec 17 Javascript
jQuery实现下拉加载功能实例代码
Apr 01 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
Jul 05 Javascript
一个超简单的jQuery回调函数例子(分享)
Aug 08 Javascript
Js自定义多选框效果的实例代码
Jul 05 Javascript
Webpack性能优化 DLL 用法详解
Aug 10 Javascript
Vue 组件间的样式冲突污染
Aug 31 Javascript
微信小程序实现音乐播放器
Nov 20 Javascript
JavaScript的Set数据结构详解
Feb 18 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
《破坏领主》销量已超100万 未来将继续开发新内容
2020/03/08 其他游戏
咖啡知识 除了喝咖啡还有那些知识点
2021/03/06 新手入门
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
PHP常用的缓存技术汇总
2014/05/05 PHP
ThinkPHP实现ajax仿官网搜索功能实例
2014/12/02 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
2018/04/20 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
Laravel自动生成UUID,从建表到使用详解
2019/10/24 PHP
jQuery之网页换肤实现代码
2011/04/30 Javascript
用js来定义浏览器中一个左右浮动元素相对于页面主体宽度的位置的函数
2012/01/21 Javascript
JavaScript 更严格的相等 [译]
2012/09/20 Javascript
2012年开发人员的16款新鲜的jquery插件体验分享
2012/12/28 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
实现图片预加载的三大方法及优缺点分析
2014/11/19 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
nodejs集成sqlite使用示例
2017/06/05 NodeJs
Vue 通过自定义指令回顾v-内置指令(小结)
2018/09/03 Javascript
详解Axios统一错误处理与后置
2018/09/26 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
2019/09/09 Javascript
在vant中使用时间选择器和popup弹出层的操作
2020/11/04 Javascript
详解vite+ts快速搭建vue3项目以及介绍相关特性
2021/02/25 Vue.js
Python中将字典转换为列表的方法
2016/09/21 Python
解决python中画图时x,y轴名称出现中文乱码的问题
2019/01/29 Python
python requests模拟登陆github的实现方法
2019/12/26 Python
Anaconda配置pytorch-gpu虚拟环境的图文教程
2020/04/16 Python
学生如何注册Pycharm专业版以及pycharm的安装
2020/09/24 Python
K近邻法(KNN)相关知识总结以及如何用python实现
2021/01/28 Python
火锅店创业计划书范文
2014/02/02 职场文书
教师对学生的寄语
2014/04/03 职场文书
副主任竞聘演讲稿
2014/08/18 职场文书
争做文明公民倡议书
2014/08/29 职场文书
迟到检讨书
2015/01/26 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书