实现数组去重

Posted on 2019-09-27 11:36  jessie-xian  阅读(189)  评论(0编辑  收藏  举报
//双循环去重
function fn(arr){
  if(Array.isArray(arr)){
    //声明一个新的数组,然后把要遍历的数组的第一个元素放入这个新数组
    var newArr = [arr[0]];
    //然后从第二个元素开始遍历老的数组,同时遍历新数组
   //把老数组和新数组的已有元素做对比,如果不相等,就放入新数组。
    for(let i=1;i<arr.length;i++){
      let flag = true;
      for(let j=0;j<newArr.length;j++){
        if(arr[i] === newArr[j]){
          flag = false;
          break;
        }
      }
      if(flag){
        newArr.push(arr[i])
      }
    }
  }
  return newArr
}

var arr = [1,1,2,2,3,4,5,5];
var arr2 = fn(arr);
console.log(arr2)  [1, 2, 3, 4, 5]
//indexOf去重
//两个关键点 1、声明新数组 2、判断老数组里的元素是否在新数组里,没有就push进新数组
function fn(arr){
  if(!Array.isArray(arr)){
       console.log('type error');
        return 
   }
   var newArr = [];
   for(let i=0;i<arr.length;i++){
       if(newArr.indexOf(arr[i]) == -1){
              newArr.push(arr[i])
        }
    }
   return newArr;
}
var arr = [1,1,2,2,3,4,5,5];
var arr2 = fn(arr);
console.log(arr2)   [1, 2, 3, 4, 5]
//set 去重  
//ES6?新增了一个数据类型 set,set的一个最大的特点就是数据不重复。
//Set()函数可以接收一个数组(或者类数组对象)作为参数来初始化。
function fn(arr){
  if(!Array.isArray(arr)){
    console.log('type error');
    return;
  }
  return [...new Set(arr)]
}

var arr = [1,1,2,2,3,4,5,5];
var arr2 = fn(arr);
console.log(arr2)   [1, 2, 3, 4, 5]