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 相关文章推荐
表单(FORM)的一些实用效果代码
Mar 25 Javascript
IE与firefox之jquery用法区别
Oct 03 Javascript
模拟jQuery ajax服务器端与客户端通信的代码
Mar 28 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
May 11 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
Jun 17 Javascript
jQuery实现选项卡切换效果简单演示
Dec 09 Javascript
JavaScript判断数组是否存在key的简单实例
Aug 03 Javascript
老生常谈javascript的类型转换
Oct 12 Javascript
原生JS实现图片轮播效果
Dec 26 Javascript
vue 属性拦截实现双向绑定的实例代码
Oct 24 Javascript
vue-cli系列之vue-cli-service整体架构浅析
Jan 14 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
Jan 23 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
IIS下配置Php+Mysql+zend的图文教程
2006/12/08 PHP
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
2009/10/31 PHP
PHP中如何定义和使用常量
2013/02/28 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
2016/05/27 PHP
thinkphp自带验证码全面解析
2016/09/18 PHP
thinkphp5框架扩展redis类方法示例
2019/05/06 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
取得一定长度的内容,处理中文
2006/12/20 Javascript
javascript 表单的友好用户体现
2009/01/07 Javascript
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
页面图片浮动左右滑动效果的简单实现案例
2014/02/10 Javascript
Jquery中扩展方法extend使用技巧
2014/08/24 Javascript
jQuery中append()方法用法实例
2015/01/08 Javascript
浅谈javascript中关于日期和时间的基础知识
2016/07/13 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
2016/12/24 Javascript
基于vue实现分页效果
2017/11/06 Javascript
在vue项目中安装使用Mint-UI的方法
2017/12/27 Javascript
浅谈vue.js导入css库(elementUi)的方法
2018/03/09 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
[00:43]魔廷新尊——痛苦女王至宝捆绑包
2020/06/12 DOTA
Python笔记(叁)继续学习
2012/10/24 Python
python二分查找算法的递归实现方法
2016/05/12 Python
如何利用Python识别图片中的文字
2020/05/31 Python
python如何发送带有附件、正文为HTML的邮件
2021/02/27 Python
美国在线宠物商店:Chewy
2019/01/12 全球购物
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
食品营养与检测应届生求职信
2013/11/08 职场文书
民族团结先进集体事迹材料
2014/05/22 职场文书
最新离婚协议书范本
2014/08/19 职场文书
实习单位指导教师评语
2014/12/30 职场文书
手术室护士个人总结
2015/02/13 职场文书
干部理论学习心得体会
2016/01/21 职场文书
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
2021/05/17 Python
Java基础之线程锁相关知识总结
2021/06/30 Java/Android
mysql脏页是什么
2021/07/26 MySQL