数组去重方法总结

时间:2022-03-03 19:03:23

网上数组去重的方法很多,这里做下总结,便于日后复习。

方法一:

  1. 先创建一个空数组(result),用来保存最终的结果;
  2. 创建标记(isRepeat),用于判断是否存在重复项;
  3. 循环原数组(arr)中的每个元素;
  4. 再对(result)中的每个元素进行二次循环,判断是否有与之相同的元素。如果有,把标记(isRepeat)设置为true,并跳出循环;
  5. 根据标记(isRepeat)判断是否向数组(result)中添加元素;
  6. 返回这个新数组(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));

 数组去重方法总结