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 相关文章推荐
jQuery UI AutoComplete 使用说明
Jun 20 Javascript
一个css与js结合的下拉菜单支持主流浏览器
Oct 08 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
Mar 26 Javascript
JQuery中DOM事件合成用法实例分析
Jun 13 Javascript
js如何判断输入字符串长度
Dec 16 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
Mar 22 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
Jun 03 Javascript
VUE开发一个图片轮播的组件示例代码
Mar 06 Javascript
JS实现的随机排序功能算法示例
Jun 09 Javascript
详解tween.js 中文使用指南
Jan 05 Javascript
jQuery实现基本淡入淡出效果的方法详解
Sep 05 jQuery
JavaScript适配器模式原理与用法实例详解
Mar 09 Javascript
将函数的实际参数转换成数组的方法
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
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
php中一个有意思的日期逻辑处理
2012/03/25 PHP
解析phpstorm + xdebug 远程断点调试
2013/06/20 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
2016/01/03 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
PHP页面间传递值和保持值的方法
2016/08/24 PHP
thinkPHP自动验证机制详解
2016/12/05 PHP
又一个图片自动缩小的JS代码
2007/03/10 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
复制网页内容,粘贴之后自动加上网址的实现方法(脚本之家特别整理)
2014/10/16 Javascript
推荐8款jQuery轻量级树形Tree插件
2014/11/12 Javascript
JS实现的Select三级下拉菜单代码
2015/08/20 Javascript
jquery 抽奖小程序实现代码
2016/10/12 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
微信公众号H5支付接口调用方法
2019/01/10 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
详解为什么Vue中不要用index作为key(diff算法)
2020/04/04 Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
2020/08/05 Javascript
如何利用JavaScript编写一个格斗小游戏
2021/01/06 Javascript
详解Vue的七种传值方式
2021/02/08 Vue.js
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
python中zip()方法应用实例分析
2016/04/16 Python
详解python实现读取邮件数据并下载附件的实例
2017/08/03 Python
python 实现二维列表转置
2019/12/02 Python
python 实现Requests发送带cookies的请求
2021/02/08 Python
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
萌新HTML5 入门指南(二)
2020/11/09 HTML / CSS
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
医院护士的求职信
2014/01/03 职场文书
乡镇党员群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
工资收入证明
2014/10/07 职场文书
2014年作风建设工作总结
2014/10/29 职场文书
党支部对转正的意见
2015/06/02 职场文书
小学语文国培研修日志
2015/11/13 职场文书
React列表栏及购物车组件使用详解
2021/06/28 Javascript
解决xampp安装后Apache无法启动
2022/03/21 Servers