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; } } 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], []);
|