JavaScript - Оптимизация цикла два array.map

1

Я должен итерация два массива, если iso Собственость первого массива равна address.country второго условия массива проверяется, и назначить адрес slug второго массива (this.concessions) для первого массива (this.countries).

В конце вам понадобится новый массив this.countries который содержит свойство address и slug (в дополнение к свойствам, которые у него уже были)

this.countries.map((element) => {
  this.concessions.map((value) => {
    if (element.iso === value.address.country) {
      element.address = value.address
      element.slug = value.slug
    }
  })
})

Как оптимизировать это, и в этом случае, что является лучшей итерацией использовать, for..of, например?

  • 5
    Почему вы используете map если ничего не возвращаете?
  • 1
    Ну, твой алгоритм O (n ^ 2). Таким образом, это не будет хорошо масштабироваться. Я бы предложил использовать цикл for на map . Вы можете использовать for ... of если хотите. Он должен работать. Если вы действительно хотели быструю производительность и готовы пожертвовать некоторой памятью, вы можете создать объект / карту, где ключи - это страны, а значения - это объекты из этих массивов. Это привело бы к поиску с постоянным временем, лишь немного увеличивая память, потому что объект / карта будет ссылаться на объекты в массиве, а не создавать новый объект.
Теги:
ecmascript-6

1 ответ

5
Лучший ответ

Просто используйте адресную карту:

 const dataByCountry = new Map();
 for(var {address, slug} of this.concessions)
    dataByCountry.set(address.country, {address, slug});

Итак, теперь поиск концессии - O(1):

for(var country of this.countries){
   const {address, slug}  =  dataByCountry.get(country.iso);
   if(address && slug){
     country.address = address;
     country.slug = slug;
  }
}

По мере того как мы повторяем страны один раз и уступки один раз, временной сложностью является O(n + m) где n и m - длины массивов. Однако это увеличение производительности достигается за счет использования большой памяти.

  • 1
    С другой стороны, для этой стратегии он может хранить свои массивы, и Карта будет просто ссылаться на объекты в массивах, а не создавать новые. Это также означает, что он может создавать различные карты, чтобы обеспечить постоянный поиск по нескольким свойствам без удвоения или утроения объема занимаемой им памяти.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню