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 相关文章推荐
JavaScript 原型与继承说明
Jun 09 Javascript
Json对象与Json字符串互转(4种转换方式)
Mar 27 Javascript
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
Oct 11 Javascript
javascript中select下拉框的用法总结
Jan 07 Javascript
原生js实现轮播图的示例代码
Feb 20 Javascript
基于layer.js实现收货地址弹框选择然后返回相应的地址信息
May 26 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
Jan 30 Javascript
微信小程序的部署方法步骤
Sep 04 Javascript
深入浅析js原型链和vue构造函数
Oct 25 Javascript
JavaScript解析及序列化JSON的方法实例分析
Jan 04 Javascript
vue祖孙组件之间的数据传递案例
Dec 07 Vue.js
vue下拉刷新组件的开发及slot的使用详解
Dec 23 Vue.js
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
php5.2.0内存管理改进
2007/01/22 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
在 IE 中调用 javascript 打开 Excel 表
2006/12/21 Javascript
清华大学出版的事半功倍系列 javascript全部源代码
2007/05/04 Javascript
二叉树先序遍历的非递归算法具体实现
2014/01/09 Javascript
一个css与js结合的下拉菜单支持主流浏览器
2014/10/08 Javascript
js常用系统函数用法实例分析
2015/01/12 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
2017/04/13 Javascript
Vue2.0实现购物车功能
2017/06/05 Javascript
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
2019/06/20 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
python实现通过shelve修改对象实例
2014/09/26 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
Python中urllib+urllib2+cookielib模块编写爬虫实战
2016/01/20 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
详解django中使用定时任务的方法
2018/09/27 Python
Python中的元组介绍
2019/01/28 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
python基于win32api实现键盘输入
2020/12/09 Python
前端面试必备之CSS3的新特性
2017/09/05 HTML / CSS
html5指南-5.使用web storage存储键值对的数据
2013/01/07 HTML / CSS
英国最大的专业户外零售商:Mountain Warehouse
2018/06/06 全球购物
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
W Hamond官网:始于1979年的钻石专家
2020/07/20 全球购物
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
工商学院毕业生自荐信
2013/11/12 职场文书
小班幼儿评语大全
2014/04/30 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript