js 巧妙去除数组中的重复项


Posted in Javascript onJanuary 25, 2010

时不时的看下YUI的源码, 总会有些收获.

一. YUI中的源码'

var toObject = function(a) { 
var o = {}; 
for (var i=0, j=a.length; i<j; i=i+1) { // 这里我调整了下, YUI源码中是i<a.length 
o[a[i]] = true; 
} 
return o; 
}; 
var keys = function(o) { 
var a=[], i; 
for (i in o) { 
if (o.hasOwnProperty(i)) { // 这里, YUI源码中是lang.hasOwnProperty(o, i) 
a.push(i); 
} 
} 
return a; 
}; 
var uniq = function(a) { 
return keys(toObject(a)); 
};

注:为了书写方便, 我省略了各方法前的类名, 大伙可自行查阅YUI的源码, 2.7.0b与2.8.0r4均可(此部分的代码是一样的).

二. 该方法的思路
1. 先以目标数组的值为key生成一个对象. 这一步是最核心的: 因为在一个对象中, key是无法重复的, 这样就很巧妙的排除了重复值;

2. 遍历生成的对象, 将这些key取出来放到一个数组中, OK, 到此就大功告成了!(简单吧, 只需两步就行)

三. 该方法的特点
1. 对于该方法, 不论数组有多少项, 都只会遍历两次, 在性能上的优势较明显(想想自己以前的做法: 对数组项进行逐个对比, 其性能之差, 可想而知).

2. 经我的测试, 该方法只适用于数组项为字符串, 数字的一维数组(我觉得, 对多维数组进行排除重复项的操作, 实在是太杯具了!).

其它的方法可以参考上一篇文章。

Javascript 相关文章推荐
HTML-CSS群中单选引发的“事件”
Mar 05 Javascript
javascript 数组的方法集合
Jun 05 Javascript
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
Feb 13 Javascript
Jquery 数据选择插件Pickerbox使用介绍
Aug 24 Javascript
js 有框架页面跳转(target)三种情况下的应用
Apr 09 Javascript
jQuery Real Person验证码插件防止表单自动提交
Nov 06 Javascript
jquery对象和DOM对象的相互转换详解
Oct 18 Javascript
JS实现JSON.stringify的实例代码讲解
Feb 07 Javascript
JS一个简单的注册页面实例
Sep 05 Javascript
angular json对象push到数组中的方法
Feb 27 Javascript
js jquery 获取某一元素到浏览器顶端的距离实现方法
Sep 05 jQuery
jquery validate 实现动态增加/删除验证规则操作示例
Oct 28 jQuery
将函数的实际参数转换成数组的方法
Jan 25 #Javascript
javascript中利用数组实现的循环队列代码
Jan 24 #Javascript
document.getElementById为空或不是对象的解决方法
Jan 24 #Javascript
JavaScript 未结束的字符串常量常见解决方法
Jan 24 #Javascript
php gethostbyname获取域名ip地址函数详解
Jan 24 #Javascript
setTimeout与setInterval在不同浏览器下的差异
Jan 24 #Javascript
js 模拟实现类似c#下的hashtable的简单功能代码
Jan 24 #Javascript
You might like
php 大数据量及海量数据处理算法总结
2011/05/07 PHP
php异常处理使用示例
2014/02/25 PHP
php在数组中查找指定值的方法
2015/03/17 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
2017/02/08 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
关于js获取radio和select的属性并控制的代码
2011/05/12 Javascript
用jquery生成二级菜单的实例代码
2013/06/24 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
js事件绑定快捷键以ctrl+k为例
2014/09/30 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
遮罩层点击按钮弹出并且具有拖动和关闭效果(两种方法)
2015/08/20 Javascript
微信小程序 wxapp地图 map详解
2016/10/31 Javascript
最常见的左侧分类菜单栏jQuery实现代码
2016/11/28 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
微信小程序 空白页重定向解决办法
2017/06/27 Javascript
vue input输入框关键字筛选检索列表数据展示
2020/10/26 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
jQuery实现全选、反选和不选功能的方法详解
2019/12/04 jQuery
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
django中ORM模型常用的字段的使用方法
2019/03/05 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
通过实例解析Python调用json模块
2019/12/11 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
空指针到底是什么
2012/08/07 面试题
艺术节主持词
2014/04/02 职场文书
物流专业自荐信
2014/05/23 职场文书
硕士毕业论文导师评语
2014/12/31 职场文书
2016年优秀少先队员事迹材料
2016/02/26 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书
Go遍历struct,map,slice的实现
2021/06/13 Golang
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers