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 相关文章推荐
function, new function, new Function之间的区别
Mar 08 Javascript
jquery 的 $(&quot;#id&quot;).html() 无内容的解决方法
Jun 07 Javascript
两个select多选模式的选项相互移动(示例代码)
Jan 11 Javascript
常规表格多表头查询示例
Feb 21 Javascript
jQuery实现在textarea指定位置插入字符或表情的方法
Mar 11 Javascript
Centos7 中安装 Node.js v4.4.4
Nov 03 Javascript
AngularJS实现根据变量改变动态加载模板的方法
Nov 04 Javascript
javascript 中的try catch应用总结
Apr 01 Javascript
Vue 表单控件绑定的实现示例
Aug 11 Javascript
详谈js对url进行编码和解码(三种方式的区别)
Aug 16 Javascript
vue生成token保存在客户端localStorage中的方法
Oct 25 Javascript
JavaScript 隐性类型转换步骤浅析
Mar 15 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
基于mysql的论坛(3)
2006/10/09 PHP
php读取图片内容并输出到浏览器的实现代码
2013/08/08 PHP
PHP中使用asort进行中文排序失效的问题处理
2014/08/18 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
2014/10/14 PHP
php计算指定目录下文件占用空间的方法
2015/03/13 PHP
使用PHP生成二维码的方法汇总
2015/07/22 PHP
PHP微信支付开发实例
2016/06/22 PHP
php中this关键字用法分析
2016/12/07 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
基于jquery的气泡提示效果
2010/05/31 Javascript
javascript面向对象编程代码
2011/12/19 Javascript
关于锚点跳转及jQuery下相关操作与插件
2012/10/01 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
jQuery中hasClass()方法用法实例
2015/01/06 Javascript
如何利用JSHint减少JavaScript的错误
2016/08/23 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
Vue作用域插槽slot-scope实例代码
2018/09/05 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
原生JS实现自定义下拉单选选择框功能
2018/10/12 Javascript
JavaScript中将值转换为字符串的五种方法总结
2019/06/06 Javascript
JavaScript实现Excel表格效果
2020/02/07 Javascript
原生JS实现拖拽效果
2020/12/04 Javascript
[49:08]Secret vs VP 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
numpy.linspace 生成等差数组的方法
2018/07/02 Python
详解python 注释、变量、类型
2018/08/10 Python
详解python解压压缩包的五种方法
2019/07/05 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
解决CSS3的opacity属性带来的层叠顺序问题
2016/05/09 HTML / CSS
The Kooples美国官方网站:为情侣提供的法国当代时尚品牌
2019/01/03 全球购物
女士和男士时尚鞋在线购物:Shoespie
2019/02/28 全球购物
七年级政治教学反思
2014/02/03 职场文书
党员公开承诺事项
2014/03/25 职场文书
企业总经理任命书
2014/06/05 职场文书
大学生实习证明范文(5篇)
2014/09/18 职场文书
法人代表证明书格式
2014/10/01 职场文书