Как улучшить производительность вложенных циклов в манипуляциях с массивами javascript? - PullRequest
0 голосов
/ 03 января 2019

Я выполнил задачу кодирования, требующую слияния ввода массивов в новый массив, добавив только один раз дублированные элементы и сохранив порядок элементов массива. Мое решение ниже:

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;

Я хотел бы узнать, как можно улучшить производительность O в вышеупомянутом решении без использования встроенных методов javascript, например, Reduce, Map и т. Д. Есть ли способ без использования вложенных циклов?

1 Ответ

0 голосов
/ 03 января 2019

Если вам разрешено, я бы предложил добавить все массивы в 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).

...