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 相关文章推荐
EXT中xtype的含义分析
Jan 07 Javascript
jQuery 学习第五课 Ajax 使用说明
May 17 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
Feb 14 Javascript
关于火狐(firefox)及ie下event获取的两种方法
Dec 27 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
Jun 27 Javascript
浅谈JavaScript中的分支结构
Jul 01 Javascript
JS本地刷新返回上一页代码
Jul 25 Javascript
详解Node.js如何开发命令行工具
Aug 14 Javascript
jquery实现转盘抽奖功能
Jan 06 Javascript
Three.js利用顶点绘制立方体的方法详解
Sep 27 Javascript
vuejs router history 配置到iis的方法
Sep 20 Javascript
浅谈小程序globalData的那些事儿
Nov 01 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 smarty 二级分类代码和模版循环例子
2011/06/16 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
2013/06/20 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
2016/10/18 PHP
PHP折半(二分)查找算法实例分析
2018/05/12 PHP
PHP实现通过CURL上传文件功能示例
2018/05/30 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
javascript引擎长时间独占线程造成卡顿的解决方案
2014/12/03 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
2016/01/30 Javascript
vue.js入门教程之计算属性
2016/09/01 Javascript
利用Angularjs实现幻灯片效果
2016/09/07 Javascript
bootstrap导航、选项卡实现代码
2016/12/28 Javascript
Vue 2.0学习笔记之Vue中的computed属性
2017/10/16 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
[00:31]2016完美“圣”典风云人物:国士无双宣传片
2016/12/04 DOTA
Python循环语句之break与continue的用法
2015/10/14 Python
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
Python实现通过继承覆盖方法示例
2018/07/02 Python
Flask框架web开发之零基础入门
2018/12/10 Python
就业推荐表自我鉴定
2013/10/29 职场文书
幼儿如何来做好自我评价
2013/11/05 职场文书
工厂保安员岗位职责
2014/01/31 职场文书
小学数学教学反思
2014/02/02 职场文书
护理学应聘自荐书范文
2014/02/05 职场文书
珍爱生命演讲稿
2014/05/10 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
端午节活动总结
2014/08/26 职场文书
廉政教育的心得体会
2014/09/01 职场文书
党员对照检查材料思想汇报(党的群众路线)
2014/09/24 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
2017春节晚会开幕词
2016/03/03 职场文书
导游词之铁岭象牙山
2019/12/06 职场文书