当要从数组中删除重复项时,我永远不确定是否最好使用内置的Javascript功能(例如Set
)来删除重复项,然后对其进行迭代以将值推入数组中>
OR
如果最好遍历数组并跟踪哈希表中可见的整数,并拼接出已经被看到的重复项,则最好。
我以前曾经使用过两种方法,但就效率而言,我不确定哪种方法最好。
对于方法2(迭代并使用哈希表),由于循环是线性的,因此我假设循环的运行时间为(On),但是每次从数组中删除重复项的拼接都会增加吗?
就Set效率而言,我真的不知道幕后情况是什么,所以我不知道。但是,第二部分将需要循环(在运行时),以将它们放入Set中后放入数组中。
方法1:
let array = [1,1,2,2,3,3];
let set = new Set([...array]);
let newArray = [];
set.forEach((num) => {
newArray.push(num);
})
方法2:
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;
}
}
编辑:我知道如何做到这一点已经被问过很多次,但是我在问哪种方法可以提供最佳的运行时间。由于每次拼接需要O(n),所以我想知道它如何缩放,例如,使用Set或其他方法。