【问题标题】:How to improve performance of nested loops in javascript array manipulation?如何提高 javascript 数组操作中嵌套循环的性能?
【发布时间】:2019-01-03 05:20:55
【问题描述】:

我做了一个编码挑战,需要通过只添加一次重复的元素并保持数组元素的顺序来将数组的输入合并到一个新数组中。我的解决方案如下:

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 性能。有没有不使用嵌套循环的方法?

【问题讨论】:

  • 第一个使用数组 flat 方法的 flat,然后从 flatted 数组中创建一个 Set 来删除重复项。你已经完成了 O(n) 和两行代码
  • @quirimmo 你能详细说明扁平化数组吗?

标签: javascript arrays loops big-o


【解决方案1】:

如果允许,我建议将所有数组添加到 Set(重复项将被忽略),然后将集合转回数组:

function union(input){
  const set = new Set(input.flat());
  return [...set];
}

console.log(union([[2, 3], [3, 4]]));

如果计算复杂性是一个问题,使用集合而不是数组通常是个好主意 - 例如,Array.prototype.includesO(N),而 Set.prototype.hasO(1)

【讨论】:

  • 这正是我要做的 :) 我以为问题已经结束,我只是放弃了评论而不是答案
猜你喜欢
  • 2013-01-29
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 2019-10-29
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
相关资源
最近更新 更多