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 相关文章推荐
一个JQuery写的点击上下滚动的小例子
Aug 27 Javascript
让新消息在网页标题闪烁提示的jQuery代码
Nov 04 Javascript
javascript从右边截取指定字符串的三种实现方法
Nov 29 Javascript
一个简单的jquery的多选下拉框(自写)
May 05 Javascript
JavaScript中的document.referrer在各种浏览器测试结果
Jul 18 Javascript
基于javascript实现checkbox复选框实例代码
Jan 28 Javascript
原生js实现jquery函数animate()动画效果的简单实例
Aug 21 Javascript
一次记住JavaScript的6个正则表达式方法
Feb 22 Javascript
Vue基本使用之对象提供的属性功能
Apr 30 Javascript
微信小程序实现的picker多级联动功能示例
May 23 Javascript
弱类型语言javascript中 a,b 的运算实例小结
Aug 07 Javascript
layui表单提交到后台自动封装到实体类的方法
Sep 12 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编码规范-php coding standard
2007/03/16 PHP
Thinkphp的volist标签嵌套循环使用教程
2014/07/08 PHP
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
100行PHP代码实现socks5代理服务器
2016/04/28 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
JQuery 图片延迟加载并等比缩放插件
2009/11/09 Javascript
JavaScript的public、private和privileged模式
2009/12/28 Javascript
js过滤数组重复元素的方法
2010/09/05 Javascript
js如何实现设计模式中的模板方法
2013/07/23 Javascript
jQuery操作CheckBox的方法介绍(选中,取消,取值)
2014/02/04 Javascript
jquery遍历checkbox的注意事项说明
2014/02/21 Javascript
利用yarn实现一个webpack+react种子
2016/10/25 Javascript
Angular实现的简单查询天气预报功能示例
2017/12/27 Javascript
js推箱子小游戏步骤代码解析
2018/01/10 Javascript
tween.js缓动补间动画算法示例
2018/02/13 Javascript
详解vue移动端日期选择组件
2018/02/22 Javascript
详解Typescript 内置的模块导入兼容方式
2020/05/31 Javascript
vue接口请求加密实例
2020/08/11 Javascript
js重写alert事件(避免alert弹框标题出现网址)
2020/12/04 Javascript
[02:38]DOTA2亚洲邀请赛 IG战队巡礼
2015/02/03 DOTA
python实现求解列表中元素的排列和组合问题
2018/03/15 Python
Python排序算法之选择排序定义与用法示例
2018/04/29 Python
Python文件读写保存操作的示例代码
2018/09/14 Python
pycharm 激活码及使用方式的详细教程
2020/05/12 Python
python怎么自定义捕获错误
2020/06/29 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
2020/07/05 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
泰国健康和美容服务预订网站:GoWabi
2019/06/03 全球购物
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
九年级政治教学反思
2014/02/06 职场文书
高中综合实践活动总结
2014/07/07 职场文书
2014企业领导班子四风对照检查材料思想汇报
2014/09/17 职场文书
局领导领导班子四风对照检查材料
2014/09/27 职场文书
2014年度安全工作总结
2014/12/04 职场文书
介绍信模板
2015/01/31 职场文书
教你nginx跳转配置的四种方式
2022/07/07 Servers