javascript 数组去重 unique
2024-10-20 13:34:08
晚上无事,偶然看到这么个小测试,拿来写一写,希望大家提建议;
直接上代码:
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'认为是不同
最新文章
- dex文件格式二
- HTTP笔记之一
- tab切换的两种方法
- OGNL和Struts2标签
- CodeForces 445B DZY Loves Chemistry
- 转:vs发布window应用程序时出错:未能签名 ...\setup.exe
- Windows phone 之Interaction.Triggers的使用
- mp4下载完后才能播放的问题
- hdu 4372 第一类stirling数的应用/。。。好题
- C#字符串和16进制转换
- Console 口配置 Telnet 登录方式典型配置指导
- Judy Beta 第二天
- 微信小程序-用户拒绝授权使用 wx.openSetting({}) 重新调起授权用户信息
- GridView的stretchMode属性
- python全栈开发day61-django简单的出版社网站展示,添加,删除,编辑(单表的增删改查)
- Luogu2612 ZJOI2012 波浪 DP
- Java编程思想 学习笔记2
- C# 数据库数据动态插入(反射)
- lncRNA研究利器之";TANRIC";
- Spring Cloud实战之初级入门(四)— 利用Hystrix实现服务熔断与服务监控