去重的一些方法总结(数组,二维,对象去重方式)

Array reduce方法去重

1
2
3
4
5
6
7
8
9
10
11
12
var arr = [1, 7, 7, 1, '1',3, 5, 3, '3', '5'];
var uniqArray = function(a) {
return a.reduce(function(p, c) {
console.log(p);
if (p.indexOf(c) < 0)
{
p.push(c);
}
return p;
}, []);
};
document.write(uniqArray(arr));

json去重

1
2
3
4
5
6
7
8
9
10
var arr2 = [];
var json = {};
for(var i = 0;i<arr.length;i++){
if(!json[arr[i]]){
arr2.push(arr[i]);
json[arr[i]] = arr[i];
console.log(json);
}
}
document.write(arr);

二分法去重

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function findInArr(arr,str){
for(var i = 0; i<arr.length;i++){
if(arr[i] == str){
return true;
}
}
return false;
}
var arr = [1,2,3,3,21,32,21,21];
function dup(arr,s,e){
if(s>e){
return [];
}
else if(s == e){
return [arr[s]];
}
var c = Math.floor((s+e)/2);
var l = dup(arr,s,c);
var r = dup(arr,c+1,e);
var arr2 = [];
for(var i = 0;i<r.length;i++){
if(!findInArr(l,r[i])){
console.log(r[i]);
l.push(r[i]);
}
}
return l;
}
document.write(dup(arr,0,arr.length-1));

查找去重

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function findInArr(arr,str){
for(var i = 0; i<arr.length;i++){
if(arr[i] == str){
return true;
}
}
return false;
}
var arr2 = [];
for(var i = 0;i<arr.length;i++){
if(!findInArr(arr2,arr[i])){
arr2.push(arr[i]);
}
}

先排序再去重

1
2
3
4
5
6
7
8
arr.sort(function(n1,n2){
return n1-n2;
});
for(var i = 0;i<arr.length;i++){
if(arr[i] === arr[i+1]){
arr.splice(i--,1);
}
}

当然,去重的方式多种多样,这里也只是列出了一小部分。下面简单说下二维数组以及对象的去重方式。

二维数组去重

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var arr = [1,2,3,[1,1,2],[3,2],2];
var uniqArray = function(arr) {
var result = arr.reduce(function(v, i) {
//判断有没有二维数组
if(Array.isArray(i)) {
i.forEach(function(item) {
if(v.indexOf(item) < 0) {
v.push(item);
}
});
}else if(v.indexOf(i) < 0){
v.push(i);
}
return v;
}, []);
return result;
};
console.log(uniqArray(arr));

对象去重

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[By stackoverflow]: http://stackoverflow.com/questions/1960473/unique-values-in-an-array

Array.prototype.getUnique = function() {
var hash = {}, result = [], key;
for ( var i = 0, l = this.length; i < l; ++i ) {
key = JSON.stringify(this[i]);
if ( !hash.hasOwnProperty(key) ) {
hash[key] = true;
result.push(this[i]);
}
}
return result;
};

var data = [
{
name: "aaa",
value: 123
},
{
name: "bbb",
value: 234
},
{
name: "aaa",
value: 123
},
{
name: "bbb",
value: 789
}
];
console.log(data.getUnique());