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 相关文章推荐
一直复略了的一个问题,关于表单重复提交
Feb 15 Javascript
JavaScript 编写匿名函数的几种方法
Feb 21 Javascript
JavaScript中判断整数的多种方法总结
Nov 08 Javascript
原生js实现类似弹窗抖动效果
Apr 02 Javascript
javascript中Function类型详解
Apr 28 Javascript
Js实现无刷新删除内容
Apr 29 Javascript
jQuery实现伸展与合拢panel的方法
Apr 30 Javascript
JavaScript Ajax编程 应用篇
Jul 02 Javascript
jQuery EasyUI Panel面板组件使用详解
Feb 28 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
Mar 08 Javascript
浅谈微信JS-SDK 微信分享接口开发(介绍版)
Aug 15 Javascript
vue-router路由懒加载及实现的3种方式
Feb 28 Vue.js
将函数的实际参数转换成数组的方法
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
3
2006/10/09 PHP
PHP自动生成月历代码
2006/10/09 PHP
如何利用http协议发布博客园博文评论
2015/08/03 PHP
谈谈 PHP7新增功能
2015/12/16 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
window.addeventjs事件驱动函数集合addEvent等
2008/02/19 Javascript
javascript 获取表单file全路径
2009/12/31 Javascript
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
javascript各浏览器中option元素的表现差异
2011/04/07 Javascript
删除节点的jquery代码
2014/01/13 Javascript
使用phantomjs进行网页抓取的实现代码
2014/09/29 Javascript
js的for in循环和java里foreach循环的区别分析
2015/01/28 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
2017/08/09 jQuery
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
JavaScript中Require调用js的实例分享
2017/10/27 Javascript
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
Python程序中的观察者模式结构编写示例
2016/05/27 Python
python中的格式化输出用法总结
2016/07/28 Python
Python中的错误和异常处理简单操作示例【try-except用法】
2017/07/25 Python
Python中的类与类型示例详解
2019/07/10 Python
为什么python比较流行
2020/06/19 Python
pyx文件 生成pyd 文件用于 cython调用的实现
2021/03/04 Python
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
企业内控岗位的职责
2014/02/07 职场文书
大学生职业规划书的范本
2014/02/18 职场文书
买卖协议书范本
2014/04/21 职场文书
年终奖发放方案
2014/06/02 职场文书
俄语专业毕业生求职信
2014/07/12 职场文书
预备党员思想汇报1000字
2014/10/07 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
Win10多屏显示如何设置?Win10电脑多屏显示设置操作方法
2022/07/07 数码科技