数组的去重问题
来源:互联网 发布:淘宝买阿迪达斯 编辑:程序博客网 时间:2024/05/16 19:19
//**************** 数组去重的几种方法****************///参考: http://php.js.cn/blog/array-unique-in-javascript/#comment2665// http://segmentfault.com/q/1010000000197274//方法一:用indexOf()查找,indexOf()只支持ie9+//而且性能不好,js引擎需要反复找多次function unique1(src){ var result = []; for (var i = 0; i < src.length; i++){ // 看能不能找到 if (result.indexOf(src[i]) == -1) { result.push(src[i]); } } return result;}console.log(unique1([1, 3, 5, 7, 5, 3]));console.log(unique1(['e','a','r','a']));//方法2: hash表,兼容性良好console.log('方法2: hash表,兼容性良好');Array.prototype.unique2 = function(){ var h = {}, result = []; for (var i = 0; i < this.length; i++){ // 看flag是否存在,若不存在,则hash,且压栈 if (!h[this[i]]) { result.push(this[i]); h[this[i]] = true; } } console.log(h); return result;}console.log([1, 3, 5, 7, 5, 3,3].unique2());console.log(['e','a','r','a'].unique2());
第二种方法有个局限,就是作为下标会被转换为字符串,这样1, ‘1’等不同类型的值会对应到同一个下标而被去重,但实际应该保留。
把 hash 表的值从 true 改为一个数组,里面保存出现过的类型就行了。
Array.prototype.unique = function()
{
var n = {}, r = [], len = this.length, val, type;
for (var i = 0; i < this.length; i++) {
val = this[i];
type = typeof val;
if (!n[val]) {
n[val] = [type];
r.push(val);
} else if (n[val].indexOf(type) < 0) {
n[val].push(type);
r.push(val);
}
}
return r;
}
// 数组去重
function uniqArray (arr) {
var obj = {};
var r = [];
for (var i = 0; i < arr.length; i++) {
obj[arr[i]] = typeof arr[i];
}
for (var i in obj) {
if (obj[i] === “number”) {
r.push(Number(i));
continue;
}
r.push(i);
}
return r;
}
var a = [1,3,2,1,2,”bb”,”cc”,”bb”];
// 数组去重 2
function uniqArray (arr) {
var r = [];
for (var i = 0; i < arr.length; i++) { if (r.indexOf(arr[i]) === -1) { r.push(arr[i]); }}return r;
}
var a = [1,3,2,1,2,”bb”,”cc”,”bb”];
// 数组去重 3
function uniqArray (arr) {
var r = [];
for (var i = 0; i < arr.length; i++) {
var common = false;
for (var j = 0; j < r.length; j++) { if (arr[i] === r[j]) { common = true; } } if (!common) { r.push(arr[i]); }}return r;
}
var a = [1,3,2,1,2,”bb”,”cc”,”bb”];
// 数组去重 4
function uniqArray(arr) {
var obj = {},
r = [],
len = arr.length,
type,
val;
for (var i = 0; i < len; i++) { val = arr[i]; type = typeof val; if (!obj[val]) { r.push(val); obj[val] = [type]; } else if (obj[val].indexOf(type) < 0) { // 若类型不同,则push r.push(val); obj[val].push(type); }}return r;
}
var a = [1,3,2,1,2,”bb”,”cc”,”bb”];
- 数组的去重问题
- json数组去重的问题--indexOf
- ios数组去重问题
- javascript数组去重问题
- js数组去重问题
- js数组嵌套和数组去重的问题
- 谈谈含复杂数据类型的数组去重问题
- 关于数组去重问题引发的一系列思考
- iOS数组的去重
- 数组去重的方法
- 数组 去重的方法
- 数组去重的优化
- 数组去重的方法
- 二维数组的去重
- 数组去重的方法
- 简单的数组去重
- 数组,json的去重
- 数组去重的方法
- phpmailer实现发送注册验证邮件
- VM11 vmware-tools 共享文件夹 报错
- spring 生命周期
- mysql/Java服务端对emoji的支持
- 初始化(1)--默认初始化&列表初始化
- 数组的去重问题
- Socket心跳包
- 身份证信息解析
- 从一个男人身上看出他的修养和抱负
- Collection,List,Set和Map用法和区别
- setTimeout,setInterval,process.nextTick,setImmediate in Nodejs
- VB文件读写
- 浅析UGC、PGC和OGC
- Hive 安装及测试二