如何高效简洁地去重?从下面两个角度考虑:
1.借助js对象key唯一的特性去重
2.借助Array自身方法遍历、操作Array
第一种方法最简洁,局限是使用了Array自身方法就必须承受filter不改变原数组的特点。
1 function uniq1(arr){ 2 var obj = {}; 3 return arr.filter(function(item,index,arr){ 4 if(obj.hasOwnProperty(item)){ //重复了 5 return false; 6 } else { 7 obj[item] = true; 8 return true; 9 }10 });11 }
所以有了第二种方法,我们自己来对数组筛选,满足一切去重的自定义要求。这里使用splice是对原数组进行元素删除,使得可以改变原数组。删除元素引起数组下标发生变化,所以第六行把i--。这种情况不能使用forEach遍历,因为该方法中的index貌似是只读的。
1 function uniq2(arr){ 2 var obj = {}; 3 for(i=0;i