第一种:时间复杂度为O(n^2)
function uniq(arr){
var result = [];
var flag = true;
for(var i=0;i<arr.length;i++){
for(var j=0;j<result.length;j++){
if(arr[i]===result[j]){
flag = false;
}
}
if(flag){
result.push(arr[i]);
}
}
return result;
}
第二种:indexOf()与filter结合使用,环境支持es5,时间复杂度为O(n)
function uniq(arr){
return arr.filter(function(item,index,array){
return array.indexOf(item) === index;
});
}
uniq([1,2,1,1,4])
输出: [1, 2, 4]
第三种:先排序sort(),再filter,时间复杂度为O(n)
function sortAndUniq(arr){
return arr.sort().filter(function(item,index,array){
return item !== array[index+1];
});
}
sortAndUniq([1,2,1,1,4])
输出: [1, 2, 4]
第四种: 借助对象,时间复杂度为O(n),但是没有区分类型,比如2和”2”
function uniq(arr){
var result = [];
var obj = {};
for(var i=0;i<arr.length;i++){
if(!obj[arr[i]]){
result.push(arr[i]);
obj[arr[i]] = 1;
}
}
return result;
}
uniq([1,2,3,1])
// 输出[1,2,3]
第五种:set方法
new Set([1,2,1,1,5]);
输出:Set(3) {1, 2, 5}