首页 > 解决方案 > Javascript:从数组中删除重复项的更有效方法?

问题描述

在寻找从数组中删除重复项时,我不确定是否最好使用内置的 Javascript 功能,例如Set删除重复项然后遍历它以将值推送到数组中

或者

如果最好遍历数组并跟踪哈希表中看到的整数,如果已经看到,则拼接出重复项。

我以前用过这两种方法,但就效率而言,我不确定哪种方法最好。
对于方法 2(迭代和使用哈希表),我假设循环的运行时间是 (On),因为它是线性的,但是每次从数组中删除重复项的拼接都会增加吗?就 Set 效率而言,我真的不知道幕后在做什么,所以我不知道。但是,其中的第二部分将需要一个循环(在运行时)在它们进入 Set 之后将它们放入一个数组中。

方法一:

let array = [1,1,2,2,3,3];

let set = new Set([...array]);

let newArray = [];
set.forEach((num) => {
   newArray.push(num);
})

方法二:

 let array = [1,1,2,2,3,3];

 let obj = {};

 for (var x = array.length - 1; x >= 0; x--) {
   if (obj[array[x]]) {
   array.splice(x,1);
   } else {
     obj[array[x]] = 1;
   }

 }

编辑:我知道如何做到这一点已经被问过很多次了,但我有点想问哪种方法可以提供最好的运行时。由于 splice 每次都需要 O(n),我想知道它是如何缩放的,例如,使用 Set 或其他方法。

标签: javascript

解决方案


推荐阅读