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 相关文章推荐
从阶乘函数对比Javascript和C#的异同
May 31 Javascript
jquery怎样实现ajax联动框(二)
Mar 08 Javascript
深入理解javaScript中的事件驱动
May 21 Javascript
Javascript弹出窗口的各种方法总结
Nov 11 Javascript
调试代码导致IE出错的避免方法
Apr 04 Javascript
JavaScript中使用Callback控制流程介绍
Mar 16 Javascript
BootStrap实现树形目录组件代码详解
Jun 21 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
Jan 05 Javascript
JavaScript实现的数字与字符串转换功能示例
Aug 23 Javascript
es6函数之严格模式用法实例分析
Mar 17 Javascript
js实现3D旋转效果
Aug 18 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
Dec 03 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
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
Laravel执行migrate命令提示:No such file or directory的解决方法
2016/03/16 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
2008/09/26 Javascript
jQuery JSON的解析方式分享
2011/04/05 Javascript
获取鼠标在div中的相对位置的实现代码
2013/12/30 Javascript
谈谈js中的prototype及prototype属性解释和常用方法
2015/11/25 Javascript
JS与jQuery实现隔行变色的方法
2016/09/09 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
2016/10/25 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
2016/11/23 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
2016/11/24 Javascript
微信公众号菜单配置微信小程序实例详解
2017/03/31 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
微信小程序模版渲染详解
2018/01/26 Javascript
vue基于mint-ui实现城市选择三级联动
2020/06/30 Javascript
JavaScript基于数组实现的栈与队列操作示例
2018/12/22 Javascript
JavaScript命名空间模式实例详解
2019/06/20 Javascript
过滤器vue.filters的使用方法实现
2019/09/18 Javascript
详解关闭令人抓狂的ESlint 语法检测配置方法
2019/10/28 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
JavaScript实现图片合成下载的示例
2020/11/19 Javascript
[04:48]DOTA2亚洲邀请赛林书豪为VGJ加油
2017/04/01 DOTA
[01:09:23]KG vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python多线程抓取天涯帖子内容示例
2014/04/03 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
2019/11/08 Python
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
应聘编辑职位自荐信范文
2014/01/05 职场文书
运动会通讯稿200字
2014/02/16 职场文书
个人批评与自我批评总结
2014/10/17 职场文书
教师师德师风整改措施
2014/10/24 职场文书
乡镇党的群众路线教育实践活动总结报告
2014/10/30 职场文书
迟到检讨书范文
2015/01/27 职场文书
兵马俑导游词
2015/02/02 职场文书
晚会开场白和结束语
2015/05/29 职场文书
python基于OpenCV模板匹配识别图片中的数字
2021/03/31 Python