[练习] 给数字数组去重——js

时间:2022-12-30 11:39:38

题目要求

完善函数 unique 的功能。

  • 1、函数 unique 会对传入的参数数组进行去重
  • 2、返回一个去重后的新的数组

如下所示:

unique([10,2,3,4,2,10]); // 返回结果为 [10,2,3,4]

function unique(str){
    var newArr = [];
    for (var i=0,len=str.length; i<len; i++){
        var isRepeat = false;
        for(var j=0; j<newArr.length;j++){
            if(str[i]==newArr[j]){
                isRepeat = true;
                break;
            }
        }
        if(!isRepeat){
            newArr.push(str[i]);
        }
        
    }
    return newArr;
}

方法一循环遍历判断

思路:

  • 构建一个新的数组存放结果
  • 每次从原数组抽出一个数字,并且循环遍历结果数组,看是否已经存在相同的数组
  • 如果没有重复,则存进结果数组
function unique(numbers) {
  // 创建一个结果数组
  var resultArr = [];
  // 循环遍历原数组,每次抽出一个数字进行判断
  for(var i = 0; i < numbers.length; i++){
    // 标识符:是否重复
    var isRepeat = false;
    // 循环遍历结果数组,进行对比
    for(var j = 0; j < resultArr.length; j++){
      if(numbers[i] == resultArr[j]){
        isRepeat = true;
        // 如果发现重复,则不需进行后面判断了
        break;
      }
    }
    // 如果没重复,则存进结果数组
    if(!isRepeat){
      resultArr.push(numbers[i]);
    }
  }
  return resultArr;
}

官答如上

 

方法二 使用对象辅助记录数字是否重复

思路:

  • 创建一个新的数组存放结果
  • 创建一个空对象记录数字是否出现过
function unique(numbers) {
  // 创建一个新的数组
  var resultArr = [];
  var numbersObj = {};
  var i = 0;
  for(; i < numbers.length; i++){
    // 如果该数字还没见过,则放进新数组中
    if(!numbersObj[numbers[i]]){
      resultArr.push(numbers[i]);
      numbersObj[numbers[i]] = 1;
    }
  }
  return resultArr;
}