JavaScript去掉数组中的重复元素


Posted in Javascript onJanuary 13, 2011

在写程序过程中,经常会遇到去除数组中重复元素的需求。要实现这个功能其实并不难。
我们可以用一个两重循环来实现,对于小的数组,这样做当然并无不妥。
但如果我们的数组比较大,里面的元素有上万个。那么用两重循环,效率是极为低下。
下面我们就用js的特性,编写一个高效去除数组重复元素的方法。

<script> 
function unique(data){ 
data = data || []; 
var a = {}; 
for (var i=0; i<data.length; i++) { 
var v = data[i]; 
if (typeof(a[v]) == 'undefined'){ 
a[v] = 1; 
} 
}; 
data.length=0; 
for (var i in a){ 
data[data.length] = i; 
} 
return data; 
} 
function test(){ 
var arr = [9,1,3,8,7,7,6,6,5,7,8,8,7,4,3,1]; 
var arr1 = unique(arr); 
alert(arr1.join(",")); 
} 
test(); 
</script>

输出结果:
9,1,3,8,7,6,5,4
js数组去重就是把数组中重复的元素去掉:
Array.prototype.delRepeat=function(){ 
var newArray=new Array(); 
var len=this.length; 
for (var i=0;i<len ;i++){ 
for(var j=i+1;j<len;j++){ 
if(this[i]===this[j]){ 
j=++i; 
} 
} 
newArray.push(this[i]); 
} 
return newArray; 
}

但是很明显这里有for循环内嵌了另一个for循环,在大数据量下肯定非常耗时!效率低下!经过查找和高人指点优化了一个新方法:

Array.prototype.delRepeat=function(){ 
var newArray=[]; 
var provisionalTable = {}; 
for (var i = 0, item; (item= this[i]) != null; i++) { 
if (!provisionalTable[item]) { 
newArray.push(item); 
provisionalTable[item] = true; 
} 
} 
return newArray; 
}

就是使用一个临时的provisionalTable对象,将数组的值作为provisionalTable对象的键值,如果相应的值不存在就将这个数组的值push到新数组中。

效率是提高了,但是有个bug,就是假设数组中换用可转换的数字和字符串,比如数组[6,"6"]这时候就好被去掉一个。悲剧,同时求解决方法。

Javascript 相关文章推荐
html 锁定页面(js遮罩层弹出div效果)
Oct 27 Javascript
js function使用心得
May 10 Javascript
在jQuery 1.5中使用deferred对象的代码(翻译)
Mar 10 Javascript
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
Aug 09 Javascript
JS 有趣的eval优化输入验证实例代码
Sep 22 Javascript
javascript实现数字+字母验证码的简单实例
Feb 10 Javascript
基于Node.js实现nodemailer邮件发送
Jan 26 Javascript
小白谈谈对JS原型链的理解
May 03 Javascript
关于JS中二维数组的声明方法
Sep 24 Javascript
JS公共小方法之判断对象是否为domElement的实例
Nov 25 Javascript
浅谈JavaScript异步编程
Jan 20 Javascript
vue实现滑动超出指定距离回顶部功能
Jul 31 Javascript
javascript基础知识大集锦(二) 推荐收藏
Jan 13 #Javascript
javascript基础知识大集锦(一) 推荐收藏
Jan 13 #Javascript
myFocus slide3D v1.1.0 使用方法与下载
Jan 12 #Javascript
异步加载script的代码
Jan 12 #Javascript
数组方法解决JS字符串连接性能问题有争议
Jan 12 #Javascript
js对数字的格式化使用说明
Jan 12 #Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
Jan 12 #Javascript
You might like
PHP中str_replace函数使用小结
2008/10/11 PHP
php 设计模式之 单例模式
2008/12/19 PHP
PHP JSON 数据解析代码
2010/05/26 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
php准确计算复活节日期的方法
2015/04/18 PHP
微信支付开发订单查询实例
2016/07/12 PHP
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
借助javascript代码判断网页是静态还是伪静态
2014/05/05 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
node.js实现快速截图
2016/08/27 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
2017/07/27 Javascript
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
2017/08/29 Javascript
js+html实现点名系统功能
2019/11/05 Javascript
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python下的Mysql模块MySQLdb安装详解
2014/04/09 Python
python字符串排序方法
2014/08/29 Python
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
Python深入06——python的内存管理详解
2016/12/07 Python
python list格式数据excel导出方法
2018/10/31 Python
Python Flask框架扩展操作示例
2019/05/03 Python
Django Model中字段(field)的各种选项说明
2020/05/19 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
详解css3使用transform出现字体模糊的解决办法
2020/10/16 HTML / CSS
中国跨镜手机配件批发在线商店:TVC-Mall
2019/08/20 全球购物
StubHub中国:购买和出售全球活动门票
2020/01/01 全球购物
求职简历的自我评价怎样写好
2013/10/07 职场文书
打造完美自荐信
2014/01/24 职场文书
自立自强的名人事例
2014/02/10 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
优秀教师感人事迹材料
2014/05/04 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
2016年教师师德师风承诺书
2016/03/25 职场文书
Oracle 数据仓库ETL技术之多表插入语句的示例详解
2021/04/12 Oracle