题目要求
完善函数 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; }