数组去重

本文参考: JavaScript 高性能数组去重
看完后把代码敲了一编,代码如下:

//构造两个数组,后拼接在一起作为数据源
let arr1 = Array.from(new Array(1000000), (x, index) => {
  return index;
});
let arr2 = Array.from(new Array(500000), (x, index) => {
  return index + index;
});
let start = new Date().getTime();
console.log("开始去重...");

function distinct(a, b, fn) {
  let preArr = a.concat(b);
  return fn(preArr);
}

//以下是多种不同的去重方法,从上至下时间复杂度越来越低
function f_filter(arr) {
  return arr.filter((e, index) => arr.indexOf(e) === index);
}
function f_forAndIndexOf(arr) {
  let newArr = [];
  for (let i = 0; i < arr.length; i++) {
    if (newArr.indexOf(arr[i]) === -1) newArr.push(arr[i]);
  }
  return newArr;
}
function f_sortAndFor(arr) {
  arr.sort();
  let newArr = [arr[0]];
  for (let i = 1; i < arr.length; i++) {
    if (arr[i] !== arr[i - 1]) newArr.push(arr[i]);
  }
  return newArr;
}
function f_set(arr) {
  return Array.from(new Set(arr));
}
function f_forOfAndObj(arr) {
  let obj = {};
  let newArr = [];
  for (let i of arr) {
    if (obj[i] !== 1) {
      newArr.push(i);
      obj[i] = 1;
    }
  }
  return newArr;
}

//去重、打印耗时
console.log("去重后的长度:", distinct(arr1, arr2, f_set).length);
let end = new Date().getTime();
console.log("耗时:", end - start);

从实践来看,几个去重函数从上至下,时间复杂度越来越低,对象的那个简直爆炸,时间贼短,比Set还快!这就是传说中的以空间换时间吧,set的表现也是相当惊人。

全部评论

相关推荐

点赞 评论 收藏
分享
牛客963010790号:为什么还要收藏
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务