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 相关文章推荐
百度判断手机终端并自动跳转js代码及使用实例
Jun 11 Javascript
基于JavaScript实现网页倒计时自动跳转代码
Dec 28 Javascript
JavaScript制作简单的日历效果
Mar 10 Javascript
很酷的星级评分系统原生JS实现
Aug 25 Javascript
Node.js使用Express创建Web项目详细教程
Mar 31 Javascript
JS库之wow.js使用方法
Sep 14 Javascript
vue下拉列表功能实例代码
Apr 08 Javascript
jQuery实现为table表格动态添加或删除tr功能示例
Feb 19 jQuery
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
Aug 23 Javascript
js判断非127开头的IP地址的实例代码
Jan 05 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
Feb 14 Javascript
vuex存取值和映射函数使用说明
Jul 24 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中截取中文字符串的代码小结
2011/07/17 PHP
php笔记之:php数组相关函数的使用
2013/04/26 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
2014/03/18 PHP
PHP PDOStatement::errorInfo讲解
2019/01/31 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
使用Javascript接收get传递的值的代码
2011/11/30 Javascript
IE6 hack for js 集锦
2014/09/23 Javascript
jQuery选择器源码解读(三):tokenize方法
2015/03/31 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
2016/10/17 Javascript
Javascript实现登录记住用户名和密码功能
2017/03/22 Javascript
axios post提交formdata的实例
2018/03/16 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
2019/12/26 Javascript
python实现代理服务功能实例
2013/11/15 Python
Python中的tuple元组详细介绍
2015/02/02 Python
Python 2与Python 3版本和编码的对比
2017/02/14 Python
python中(str,list,tuple)基础知识汇总
2018/02/20 Python
将pandas.dataframe的数据写入到文件中的方法
2018/12/07 Python
使用Python做垃圾分类的原理及实例代码附源码
2019/07/02 Python
pandas基于时间序列的固定时间间隔求均值的方法
2019/07/04 Python
Django之form组件自动校验数据实现
2020/01/14 Python
NumPy统计函数的实现方法
2020/01/21 Python
Python读取表格类型文件代码实例
2020/02/17 Python
浅析NumPy 切片和索引
2020/09/02 Python
HTML5中外部浏览器唤起微信分享功能的代码
2020/09/15 HTML / CSS
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
朗仕(Lab series)英国官网:雅诗兰黛集团男士专属护肤品牌
2017/11/28 全球购物
英国信箱在线鲜花速递公司:Bloom & Wild
2019/03/10 全球购物
英国领先的豪华时尚家居网上商店:Amara
2019/08/12 全球购物
Antler英国官网:购买安特丽行李箱、拉杆箱
2019/08/25 全球购物
优秀生推荐信范文
2013/11/28 职场文书
银行简历自我评价
2014/02/11 职场文书
关于迟到的检讨书
2015/05/06 职场文书
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python