![](/img/trans.png)
[英]how to improve performance of nested for loops when comparing values in an array
[英]How to improve performance of nested loops in javascript array manipulation?
我进行了编码挑战,要求仅通过添加重复元素一次并保持数组元素的顺序,将数组的输入合并到新数组中。 我的解决方案如下:
function union(arr){
let newArr = [];
let length = arr.length;
for(let i=0; i< length; i++){
for(let j=0; j<arr[i].length; j++){
if(!newArr.includes(arr[i][j])){
newArr.push(arr[i][j]);
}
}
}
return newArr;
我想知道如何在不使用任何JavaScript内置方法(如reduce或map等)的情况下提高上述解决方案的O性能。是否有一种不使用嵌套循环的方法?
如果允许,我建议将所有数组添加到Set
(重复的项目将被忽略),然后将Set变回数组:
function union(input){ const set = new Set(input.flat()); return [...set]; } console.log(union([[2, 3], [3, 4]]));
如果计算复杂性是一个问题,通常最好使用集合而不是数组Array.prototype.includes
是O(N)
,而Set.prototype.has
是O(1)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.