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 相关文章推荐
js实现拖拽 闭包函数详细介绍
Nov 25 Javascript
javascript确认框的三种使用方法
Dec 17 Javascript
javascript的propertyIsEnumerable()方法使用介绍
Apr 09 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
Aug 15 Javascript
js插件YprogressBar实现漂亮的进度条效果
Apr 20 Javascript
浅谈jQuery中的checkbox问题
Aug 10 Javascript
AngularJS入门教程之过滤器用法示例
Nov 02 Javascript
vue父子组件的数据传递示例
Mar 07 Javascript
js实现产品缩略图效果
Mar 10 Javascript
用vue写一个仿简书的轮播图的示例代码
Mar 13 Javascript
vue使用echarts画组织结构图
Feb 06 Vue.js
分享几个JavaScript运算符的使用技巧
Apr 24 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
BBS(php &amp; mysql)完整版(一)
2006/10/09 PHP
php编写一个简单的路由类
2011/04/13 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
jQuery select控制插件
2009/08/17 Javascript
Jquery选择器 $实现原理
2009/12/02 Javascript
js调用webservice中的方法实现思路及代码
2013/02/25 Javascript
IE6下opacity与JQuery的奇妙结合
2013/03/01 Javascript
基于socket.io和node.js搭建即时通信系统
2014/07/30 Javascript
jQuery对象和DOM对象之间相互转换的方法介绍
2015/02/28 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
详解html-webpack-plugin用法全解
2018/01/22 Javascript
详解create-react-app 自定义 eslint 配置
2018/06/07 Javascript
js+html5实现手机九宫格密码解锁功能
2018/07/30 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
2020/03/06 Javascript
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
python使用mailbox打印电子邮件的方法
2015/04/30 Python
解决python多行注释引发缩进错误的问题
2019/08/23 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
python中round函数如何使用
2020/06/19 Python
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
浅谈HTML5 服务器推送事件(Server-sent Events)
2017/08/01 HTML / CSS
详解H5 活动页之移动端 REM 布局适配方法
2017/12/07 HTML / CSS
日本PLST在线商店:日本时尚杂志刊载的人气服装
2016/12/10 全球购物
自荐信要包含哪些内容
2013/11/06 职场文书
中学生学雷锋演讲稿
2014/04/26 职场文书
我们的节日中秋活动方案
2014/08/19 职场文书
党委领导班子整改方案
2014/09/30 职场文书
2015幼儿园庆元旦活动方案
2014/12/09 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
电影小兵张嘎观后感
2015/06/03 职场文书
2016元旦文艺汇演主持词(开场白+结束语)
2015/12/03 职场文书
基层医务人员三严三实心得体会
2016/01/05 职场文书
2016民族团结先进个人事迹材料
2016/02/26 职场文书
html用代码制作虚线框怎么做? dw制作虚线圆圈的技巧
2022/12/24 HTML / CSS