ES5方法

双层循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function uniq(array){
var result=[];
for(var i=0;i<array.length;i++){
for(var j=0;j<result.length;j++){
if(array[i] === result[j]){
break;
}
}
// 如果array[i]是唯一的,那么执行完循环,j等于result.length
if (j === result.length) {
result.push(array[i])
}
}
return result;
}

var arr = [1,2,2,4,9,6,7,5,2,3,5,6,5];
console.log(uniq(arr));

indexOf

1
2
3
4
5
6
7
8
9
10
11
12
function uniq(array){
var temp = []; //一个新的临时数组
for(var i = 0; i < array.length; i++){
if(temp.indexOf(array[i]) == -1){
temp.push(array[i]);
}
}
return temp;
}

var arr = [1,2,2,4,9,6,7,5,2,3,5,6,5];
console.log(uniq(arr));

hashtable利用对象的属性唯一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function uniq(array){
var result=[],
hash={};
array.forEach(function(item){
if(!hash[item]){
result.push(item);
hash[item] = true;
}
});
return result;
}

var arr = [1,2,2,4,9,6,7,5,2,3,5,6,5];
console.log(uniq(arr));

复杂数据结构处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function uniq(array){
var unique={};
array.forEach(function(item){
unique[JSON.stringify(item)] = item;
});

array = Object.keys(unique).map(function(data){
return JSON.parse(data)
});
return array;
}
var arr = [
{name: 'lee', from:'beijing'},
{name: 'jersey', from: 'shanghai'},
{name: 'tom',from:'beijing'},
{name: 'jersey', from: 'shanghai'}
]
console.log(uniq(arr))

ES6方法

ES6 Set去重

1
2
3
4
5
function uniq (array) {
return Array.from(new Set(array))
}
var arr = [1,2,2,4,9,6,7,5,2,3,5,6,5];
console.log(uniq(arr))

ES6 […new Set(arr)]

1
2
3
[...new Set(arr)]
var arr = [1,2,2,4,9,6,7,5,2,3,5,6,5];
console.log([...new Set(arr)])

filter

1
2
var arr = [1,2,2,4,9,6,7,5,2,3,5,6,5];
arr.filter((item, index) => arr.indexOf(item) === index);

reduce

1
2
3
var arr = [1,2,2,4,9,6,7,5,2,3,5,6,5];
arr.reduce((unique, item) =>
unique.includes(item) ? unique : [...unique, item], []);