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 相关文章推荐
asp javascript 实现关闭窗口时保存数据的办法
Nov 24 Javascript
jquery 查找select ,并触发事件的实现代码
Mar 30 Javascript
js调用打印机打印网页字体总是缩小一号的解决方法
Jan 24 Javascript
javascript 中that的含义示例介绍
May 14 Javascript
Jquery代码实现图片轮播效果(一)
Aug 12 Javascript
关于input全选反选恶心的异常情况
Jul 24 Javascript
JS简单获取当前日期和农历日期的方法
Apr 17 Javascript
webpack引入eslint配置详解
Jan 22 Javascript
vue组件三大核心概念图文详解
May 30 Javascript
使用vue-router切换页面时实现设置过渡动画
Oct 31 Javascript
vue实例的选项总结
Jun 09 Javascript
jQuery实现购物车全功能
Jan 11 jQuery
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开发环境配置(MySQL数据库安装图文教程)
2010/04/28 PHP
ThinkPHP安装和设置
2015/07/27 PHP
laravel学习教程之关联模型
2016/07/30 PHP
JQuery 获得绝对,相对位置的坐标方法
2010/02/09 Javascript
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
说说JSON和JSONP 也许你会豁然开朗
2012/09/02 Javascript
javascript实现简单的贪吃蛇游戏
2015/03/31 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
jQuery验证插件validate使用详解
2016/05/11 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
AngularJs实现分页功能不带省略号的代码
2016/05/30 Javascript
JavaScript数组方法大全(推荐)
2016/07/05 Javascript
基于JavaScript实现本地图片预览
2017/02/08 Javascript
requirejs按需加载angularjs文件实例
2017/06/08 Javascript
vue数据控制视图源码解析
2018/03/28 Javascript
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
uni-app微信小程序登录并使用vuex存储登录状态的思路详解
2019/11/04 Javascript
vue 动态创建组件的两种方法
2020/12/31 Vue.js
Python中无限元素列表的实现方法
2014/08/18 Python
python+requests+unittest API接口测试实例(详解)
2017/06/10 Python
python批量修改文件编码格式的方法
2018/05/31 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
redis数据库及与python交互用法简单示例
2019/11/01 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
2020/06/10 Python
Django CBV模型源码运行流程详解
2020/08/17 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
2020/09/29 Python
python3从网络摄像机解析mjpeg http流的示例
2020/11/13 Python
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
让IE9以下版本的浏览器兼容HTML5的方法
2014/03/12 HTML / CSS
寒假实习自荐信
2014/01/26 职场文书
《我为你骄傲》教学反思
2014/02/20 职场文书
《水上飞机》教学反思
2014/04/10 职场文书
财务工作疏忽检讨书
2014/09/11 职场文书
信访维稳工作汇报
2014/10/27 职场文书
Linux在两个服务器直接传文件的操作方法
2022/08/05 Servers