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写的一个自定义弹出式对话框代码
Jan 17 Javascript
JavaScript中split() 使用方法汇总
Apr 17 Javascript
jQuery实现的文字hover颜色渐变效果实例
Feb 20 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
Mar 04 Javascript
JavaScript生成验证码并实现验证功能
Sep 24 Javascript
微信小程序  自定义创建详细介绍
Oct 27 Javascript
jquery.zclip轻量级复制失效问题
Jan 08 Javascript
Vue函数式组件-你值得拥有
May 09 Javascript
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
May 14 Javascript
VUE+node(express)实现前后端分离
Oct 13 Javascript
Vue中key的作用示例代码详解
Jun 10 Javascript
区分vue-router的hash和history模式
Oct 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获取当前网址及域名的实现代码
2013/06/23 PHP
PHP删除数组中空值的方法介绍
2014/04/14 PHP
php+js iframe实现上传头像界面无跳转
2014/04/29 PHP
php中strtotime函数用法详解
2014/11/15 PHP
php获取指定日期之间的各个周和月的起止时间
2014/11/24 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
2016/01/05 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
2007/02/22 Javascript
深入理解JavaScript系列(12) 变量对象(Variable Object)
2012/01/16 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
浅谈Javascript事件处理程序的几种方式
2012/06/27 Javascript
单击按钮显示隐藏子菜单经典案例
2013/01/04 Javascript
JS来动态的修改url实现对url的增删查改
2014/09/05 Javascript
浅谈js原生拖放
2016/11/21 Javascript
Vuex之理解Mutations的用法实例
2017/04/19 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
Javascript实现的StopWatch功能示例
2017/06/13 Javascript
JavaScript原生实现观察者模式的示例
2017/12/15 Javascript
详解如何在React组件“外”使用父组件的Props
2018/01/12 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
vue中英文切换实例代码
2020/01/21 Javascript
Python 多线程抓取图片效率对比
2016/02/27 Python
python 采集中文乱码问题的完美解决方法
2016/09/27 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
2018/01/24 Python
python 协程中的迭代器,生成器原理及应用实例详解
2019/10/28 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
2020/04/08 Python
Django admin管理工具TabularInline类用法详解
2020/05/14 Python
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
我的动漫时代的创业计划书范文
2014/01/27 职场文书
《路旁的橡树》教学反思
2014/04/07 职场文书
2014年大学宣传部工作总结
2014/12/19 职场文书
放牛班的春天观后感
2015/06/01 职场文书
斗罗大陆八大特殊魂兽,龙族始祖排榜首,第五最残忍(翠魔鸟)
2022/03/18 国漫