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 1.0.4 - New Wave Javascript(js源文件)
Jan 15 Javascript
修改jQuery.Autocomplete插件 支持中文输入法 避免TAB、ENTER键失效、导致表单提交
Oct 11 Javascript
event.srcElement 用法笔记e.target
Dec 18 Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
Mar 03 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
Jun 08 Javascript
jQuery事件绑定方法学习总结(推荐)
Nov 21 Javascript
JS实现类似百叶窗下拉菜单效果
Dec 30 Javascript
微信小程序 页面跳转及数据传递详解
Mar 14 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
Nov 03 Javascript
详解AngularJS之$window窗口对象
Jan 17 Javascript
Vue是怎么渲染template内的标签内容的
Jun 05 Javascript
JavaScript 如何在浏览器中使用摄像头
Dec 02 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 开发环境配置(Zend Server安装)
2010/04/28 PHP
php实现通用的信用卡验证类
2015/03/24 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
tbody元素支持嵌套的注意方法
2007/03/24 Javascript
js中this用法实例详解
2015/05/05 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
BackBone及其实例探究_动力节点Java学院整理
2017/07/14 Javascript
Vuex中mutations与actions的区别详解
2018/03/01 Javascript
webpack打包js的方法
2018/03/12 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
JavaScript计算出两个数的差值
2020/03/19 Javascript
vue3.0 项目搭建和使用流程
2021/03/04 Vue.js
[18:20]DOTA2 HEROS教学视频教你分分钟做大人-昆卡
2014/06/11 DOTA
python文件操作整理汇总
2014/10/21 Python
python MySQLdb使用教程详解
2018/03/20 Python
python实现多人聊天室
2020/03/31 Python
Python设计模式之解释器模式原理与用法实例分析
2019/01/10 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
2020/05/18 Python
Python Tkinter图形工具使用方法及实例解析
2020/06/15 Python
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
《小松树和大松树》教学反思
2014/02/20 职场文书
建议书怎么写
2014/03/12 职场文书
让世界充满爱演讲稿
2014/05/24 职场文书
爱国口号
2014/06/19 职场文书
医德医魂心得体会
2014/09/11 职场文书
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书
付款承诺函范文
2015/01/21 职场文书
运动与健康自我评价
2015/03/09 职场文书
2019广播稿怎么写
2019/04/17 职场文书
2019学校运动会开幕词
2019/05/13 职场文书
游戏开发中如何使用CocosCreator进行音效处理
2021/04/14 Javascript
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android