数组去重算法总结

282 阅读1分钟

数组去重的算法总结

利用Set ()+Array.from ():时间复杂度O(n),空间复杂度O(n)
利用两层循环+数组的splice方法:时间复杂度O(n^2),空间复杂度O(1)
利用数组的indexOf方法:时间复杂度O(n^2),空间复杂度O(n)
利用数组的includes方法:时间复杂度O(n^2),空间复杂度O(n)
利用数组的filter ()+indexOf ():时间复杂度O(n^2),空间复杂度O(n)
利用Map ():时间复杂度O(n),空间复杂度O(n)


//利用Set()+Array.from()
function unique(arr) {
  return Array.from(new Set(arr));
}

//利用两层循环+数组的splice方法
function unique(arr) {
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] === arr[j]) {
        //如果第一个等于第二个,splice方法删除第二个
        arr.splice(j, 1);
        j--;
      }
    }
  }
  return arr;
}

//利用数组的indexOf方法
function unique(arr) {
  let result = []; //新建一个数组
  for (let i = 0; i < arr.length; i++) {
    //遍历旧数组
    if (result.indexOf(arr[i]) === -1) {
      //如果新数组中没有旧数组中的元素,则存入新数组中
      result.push(arr[i]);
    }
  }
  return result;
}

//利用数组的includes方法
function unique(arr) {
  let result = []; //新建一个结果数组
  for (let item of arr) {
    //遍历需要去重的数组
    if (!result.includes(item)) {
      //如果结果数组中不包含当前元素,则存入结果数组中
      result.push(item);
    }
  }
  return result;
}

//利用数组的filter()+indexOf()
function unique(arr) {
  return arr.filter((item, index) => {
    //返回第一次出现该元素的索引是否等于当前索引,即过滤掉后面重复出现的元素
    return arr.indexOf(item) === index;
  });
}

//利用Map()
function unique(arr) {
  let map = new Map(); //创建一个Map对象
  let result = []; //创建一个结果数组
  for (let item of arr) {
    //遍历需要去重的数组
    if (!map.has(item)) {
      //如果Map对象中没有该元素,则存入Map对象和结果数组中
      map.set(item, true);
      result.push(item);
    }
  }
  return result;
}