数组去重
第一种:时间复杂度为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}