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 相关文章推荐
求解开jscript.encode代码的asp函数
Feb 28 Javascript
JavaScript让IE浏览器event对象符合W3C DOM标准
Nov 24 Javascript
jquery遍历checkbox介绍
Feb 21 Javascript
jQuery队列操作方法实例
Jun 11 Javascript
jquery通过ajax加载一段文本内容的方法
Jan 15 Javascript
javascript实现动态加载CSS
Jan 26 Javascript
图文详解JavaScript的原型对象及原型链
Aug 02 Javascript
基于JavaScript实现跳转提示页面
Sep 24 Javascript
jQuery图片瀑布流的简单实现代码
Mar 15 Javascript
JavaScript数组方法的错误使用例子
Sep 13 Javascript
JS判断两个数组或对象是否相同的方法示例
Feb 28 Javascript
解决vant中 tab栏遇到的坑 van-tabs
Nov 04 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正则的Unknown Modifier错误解决方法
2010/03/02 PHP
php中用于检测一个地理IP地址是否可用的代码
2012/02/19 PHP
ajax完美实现两个网页 分页功能的实例代码
2013/04/16 PHP
php class中self,parent,this的区别以及实例介绍
2013/04/24 PHP
php解压文件代码实现php在线解压
2014/02/13 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
扩展String功能方法
2006/09/22 Javascript
JavaScript 异步调用框架 (Part 1 - 问题 &amp; 场景)
2009/08/03 Javascript
JavaScript中split与join函数的进阶使用技巧
2016/05/03 Javascript
用JS中split方法实现彩色文字背景效果实例
2016/08/24 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
js实现图片左右滚动效果
2017/02/27 Javascript
浅谈vue2 单页面如何设置网页title
2017/11/08 Javascript
JavaScript设计模式之缓存代理模式原理与简单用法示例
2018/08/07 Javascript
基于JS开发微信网页录音功能的实例代码
2019/04/30 Javascript
vue中使用router全局守卫实现页面拦截的示例
2020/10/23 Javascript
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
Pycharm学习教程(1) 定制外观
2017/05/02 Python
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
python opencv 图像尺寸变换方法
2018/04/02 Python
python中yaml配置文件模块的使用详解
2018/04/27 Python
python3基于TCP实现CS架构文件传输
2018/07/28 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
Pytorch实现各种2d卷积示例
2019/12/30 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
关于Python解包知识点总结
2020/05/05 Python
python保留格式汇总各部门excel内容的实现思路
2020/06/01 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
Html5页面中的返回实现的方法
2018/02/26 HTML / CSS
Melissa香港官网:MDreams
2016/07/01 全球购物
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
Wojas罗马尼亚网站:波兰皮鞋品牌
2018/11/01 全球购物
毕业生文员求职信
2013/11/03 职场文书
自我评价的范文
2014/02/02 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
python如何利用cv2模块读取显示保存图片
2021/06/04 Python