网上数组去重的方法很多,这里做下总结,便于日后复习。
方法一:
- 先创建一个空数组(result),用来保存最终的结果;
- 创建标记(isRepeat),用于判断是否存在重复项;
- 循环原数组(arr)中的每个元素;
- 再对(result)中的每个元素进行二次循环,判断是否有与之相同的元素。如果有,把标记(isRepeat)设置为true,并跳出循环;
- 根据标记(isRepeat)判断是否向数组(result)中添加元素;
- 返回这个新数组(result)。
// 数组去重-方法一 function removeRepeat01(arr){ var result =[],
isRepeat, len_arr = arr.length; for(var i=0; i < len_arr; i++){ isRepeat = false; for(var j=0; j < result.length; j++){ if(arr[i] === result[j]){ //这里用'===' isRepeat = true; break; } } if(!isRepeat){ result.push(arr[i]); } } return result; }
注:由于需要多次重复循环比较,此方法的执行效率较低,下面是第二种方法。
方法二:引用类似hash表的思想
//数组去重方法二 function removeRepeat02(arr) { var hash = {}, len = arr.length, str_mark = '', result = []; for (var i = 0; i < len; i++){ //判断数组中是否存在字符串 if(typeof arr[i]=='string'){ str_mark = '_isStr'; }else { str_mark = ''; } //去重 if (!hash[arr[i] + str_mark]){ hash[arr[i] + str_mark] = true; result.push(arr[i]); } } return result; }
测试:
var aArr = [1,2,'222',222,3,4,5,5,5,6,6,7,8]; console.log(removeRepeat01(aArr)); console.log(removeRepeat02(aArr));