javascript 数组去重 unique
晚上无事,偶然看到这么个小测试,拿来写一写,希望大家提建议;
直接上代码:
Array.prototype.unique = function (isStrict) {
if (this.length < 2)
return [this[0]] || [];
var tempObj = {}, newArr = [];
for (var i = 0; i < this.length; i++) {
var v = this[i];
var condition = isStrict ? (typeof tempObj[v] != typeof v) : false;
if ((typeof tempObj[v] == "undefined") || condition) {
tempObj[v] = v;
newArr.push(v);
}
}
return newArr;
}
验证:
var arr = ["9", 9, 1, 3, 8, 7, 7, 6, 6, 5, 7, 8, 8, 7, 4, 3, 1, 22, 22, 'a', 'a','bcd', 'abc', 'bcd'];
var newArr = arr.unique(true);
alert(newArr.join(","));//严格模式:9,9,1,3,8,7,6,5,4,22,a,bcd,abc,将其中"9",9认为不同
var newArr = arr.unique();
alert(newArr.join(","));//普通模式:9,1,3,8,7,6,5,4,22,a,bcd,abc,将其中"9",9认为相同
注意:
1、使用临时对象tempObj,将数组的值作为对象的键值,遍历数组时对当前值根据对象键值判断,不存在就将这个数组的值push到新数组中。提高效率
2、使用类型判断,如果当前数组值做为对象键,所对应的对象值类型与当前值类型一致,则可以根据参数(isStirct严格模式)决定是否去重,true表示严格,对于字符为22,或数字为22都认为一样,否则保留
看了一下JavaScript高级程序设计中关于数组的操作,又想到种更简单的去重方法,代码如下:
Array.prototype.unique = function () {
var newArr = [];
for (var i = 0; i < this.length; i++) {
if (newArr.indexOf(this[i]) == -1) {
newArr.push(this[i]);
}
}
return newArr;
}
var arr = ['a','b',1,4,5,8,4,3,1,'a','1'];
alert(arr.unique());//a,b,1,4,5,8,3,1 indexOf默认调用===,因此将1与'1'认为是不同
javascript 数组去重 unique的更多相关文章
- 也谈面试必备问题之 JavaScript 数组去重
Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. ...
- javascript数组去重算法-----3
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javascript数组去重算法-----2
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javascript数组去重算法-----1
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javascript数组去重算法-----5
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javascript数组去重算法-----4(另一种写法__2)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javascript数组去重算法-----4(另一种写法)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javascript数组去重算法-----4
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JavaScript 数组去重方法总结
1.遍历数组法: 这应该是最简单的去重方法(实现思路:新建一新数组,遍历数组,值不在新数组就加入该新数组中) // 遍历数组去重法 function unique(arr){ var _arr = [ ...
随机推荐
- codeforces 722C (并查集)
题目链接:http://codeforces.com/contest/722/problem/C 题意:每次破坏一个数,求每次操作后的最大连续子串和. 思路:并查集逆向操作 #include<b ...
- 如何开发、调试Hybrid项目-- 入门篇
前言 随着移动浪潮的兴起,各种APP层出不穷,极速的业务扩展提升了团队对开发效率的要求,这个时候使用IOS&Andriod开发一个APP似乎成本有点过高了,而H5的低成本.高效率.跨平台等特性 ...
- WEB前端工程师面试题【前端】
1.form中的input有哪些类型?各是做什么处理使用的?2.table标签中border,cellpadding td标签中colspan,rowspan分别起什么作用?3.给Array原型添加一 ...
- 通过git在github上建立gh-pages分支并查看网页效果
建立gh-pages分支: 进入到你想要上传的文件夹下: cd text(text为文件夹名) git初始化 git init 创 ...
- C++类成员布局
在C++中对象的内存布局与类成员声明的顺序一致,静态成员放在数据区(Data Section)而非对象内存中,若多个类静态成员名称相同,C++则按照name mangling技术进行重命名保证名称的唯 ...
- Lua IO库详解
I/O 库提供了两套不同风格的文件处理接口. 第一种风格使用隐式的文件句柄: 它提供设置默认输入文件及默认输出文件的操作, 所有的输入输出操作都针对这些默认文件. 第二种风格使用显式的文件句柄. 当使 ...
- linux curl 下载jdk
进入orecle官网,找到需要的安装包 需要cookie同意相关协议才能下载 curl -L "http://download.oracle.com/otn-pub/java/jdk/8u1 ...
- mySql中IFNULL的使用说明
IFNULL(expr1,expr2) 如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2.IFNULL()返回一个数字或字符串值 具体用法如:现有学生表(tbl_stu ...
- IOS tableview下拉刷新上拉加载分页
http://code4app.com/ios/快速集成下拉上拉刷新/52326ce26803fabc46000000 刷新没用用插件,加载使用的MJ老师的插件. - (void)viewDidLoa ...
- 2016.12.01 搭建dendroid备忘
在2014年的时候看了freebuf的那篇,感觉很6,2014年搭了就一遍成功了,事过两年,物是人非啊,2016搞了云,没事测试,搞了一遍死活不成功,第二天测试成功,过程逗比坎坷,没什么难的 //环境 ...