javascript - 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 或其他方法。
解决方案
推荐阅读
- ios - 我用 forEach 创建了一个 Circle,但我不知道如何检查其中的数据。/SwiftUI
- java - 我们如何设置 BigDecimal 的分辨率,使其只能采用指定增量的值?
- mqtt - 使用通配符时跟踪 MQTT 主题的优雅方法是什么?
- cloudflare-workers - Cloudflare Worker Cache Put Mobile 不工作
- python - Tkinter 应用程序在尝试重新启动时冻结
- javascript - 从给定的 lat 和 long 角度列表中检测边界 lat longs
- django - Django,射箭系统
- apache-kafka - 当greenplum gpss提交到kafka主题时
- docker - 在 docker 上工作几个用户来自不同地方的相同文件
- python - 如何将 2D 椭圆拟合到给定点和给定焦点