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 相关文章推荐
js window.onload 加载多个函数的方法
Nov 02 Javascript
浅析JavaScript中两种类型的全局对象/函数
Dec 05 Javascript
jQuery中position()方法用法实例
Jan 16 Javascript
BootStrap的table表头固定tbody滚动的实例代码
Aug 24 Javascript
Bootstrap简单表单显示学习笔记
Nov 15 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
Jan 19 Javascript
JS闭包用法实例分析
Mar 27 Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
Mar 29 Javascript
AngularJS自定义指令详解(有分页插件代码)
Jun 12 Javascript
浅谈通过JS拦截 pushState和replaceState事件
Jul 21 Javascript
JS实现点击循环切换显示内容的方法
Oct 19 Javascript
Angular2进阶之如何避免Dom误区
Apr 02 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/09/30 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
2016/04/11 PHP
php简单实现数组分页的方法
2016/04/30 PHP
自制PHP框架之设计模式
2017/05/07 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
js前台分页显示后端JAVA数据响应
2013/03/18 Javascript
jQuery处理json数据返回数组和输出的方法
2015/03/11 Javascript
Vue组件BootPage实现简单的分页功能
2016/09/12 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
DropDownList控件绑定数据源的三种方法
2016/12/24 Javascript
EsLint入门学习教程
2017/02/17 Javascript
Vue2仿淘宝实现省市区三级联动
2020/04/15 Javascript
vue学习教程之带你一步步详细解析vue-cli
2017/12/26 Javascript
在vue项目中安装使用Mint-UI的方法
2017/12/27 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
2019/04/09 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
tensorflow实现简单的卷积网络
2018/05/24 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
python 实现调用子文件下的模块方法
2018/12/07 Python
python实现PCA降维的示例详解
2020/02/24 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
2020/08/02 Python
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
canvas进阶之如何画出平滑的曲线
2018/10/15 HTML / CSS
马来西亚户外装备商店:PTT Outdoor
2019/07/13 全球购物
居委会个人对照检查材料思想汇报
2014/09/29 职场文书
综合素质评价个性与发展自我评价
2015/03/06 职场文书
2015年工商所工作总结
2015/05/21 职场文书
放飞理想主题班会
2015/08/14 职场文书
python学习之panda数据分析核心支持库
2021/05/07 Python
Java Socket实现Redis客户端的详细说明
2021/05/26 Redis
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python