利用javascript进行数组去重,调研了下面几种方法:
1.遍历数组,删除已出现的元素
var uniqueArrByDel = function(arr){ for(var i = 0; i < arr.length-1; i++){ var item = arr[i]; for(var j = i +1; j < arr.length;j++){ (item=== arr[j]) && (arr.splice(j,1)&&j--); } } }
2.利用对象来删除元素
var uniqueArrByObj = function(arr){ var tempArr = [], obj = {}; for(var i = 0; i < arr.length; i ++){ var item = arr[i]; if(!obj[item]){ obj[item] = true; tempArr.push(item); } } return tempArr; }
3.利用数组原生方法filter
var uniqueArrByFilter = function(arr){ return arr.filter(function(elem, index, self){//elem当前元素 index当前索引 self数组 return index == self.indexOf(elem);//数组原生方法filter中设置回调函数,回调函数返回true则不删除,返回false则删除元素 }); }
动态生成100元素长的数组来测试上面三个方法,1和2的执行时间小于0ms,3的执行时间大于11ms,看来原生方法效率一般般啊
参考:
http://www.cnblogs.com/mackxu/p/array-unique.html
http://blog.segmentfault.com/fishenal/1190000000418858