数组去重是一道面试的经典题型,出现在各大公司的面试题中
思路1:
复制一个新的数组,用每个元素跟新数组中查找是否存在,不存在则添加入新数组
function unique( arr ){ var list = []; for( var i=0,l = arr.length;i<l;i++ ){ if( list.indexOf(arr[i]) == -1 ){ list.push(arr[i]) } } return list }
思路2:
给数组排序,排序之后比较前后两个值,相同则去除上一个,继续比较,循环之后将数组中的空值去掉
function unique( arr ){ var list = []; arr.sort(function(a,b){return a>b}); for( var i=0,l = arr.length-1;i<l;i++ ){ if( arr[i] == arr[i+1] ){ arr[i] = undefined } } for( var i=0,l = arr.length;i<l;i++ ){ if( arr[i] !== undefined ){ list.push(arr[i]) } } return list }
代码可以把两次循环精简成一次
function unique( arr ){ var list = []; arr.sort(function(a,b){return a>b}); list.push(arr[0]) for( var i=1,l = arr.length;i<l;i++ ){ if( arr[i] > list[list.length-1] ){ list.push(arr[i]) } } return list }
思路3:
需要选择一种合适的哈希算法,将对象转化为唯一值来做比较
function unique( arr ){ var obj = {},list = []; for( var i = 0,length = arr.length;i<length;i++ ){ var hash_value = 哈希算法(arr[i]) if( !(hash_value in obj) ){ obj[hash_value] = true; list.push(arr[i]) } } return list }