Я должен итерация два массива, если 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
, например?
Просто используйте адресную карту:
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
- длины массивов. Однако это увеличение производительности достигается за счет использования большой памяти.
map
если ничего не возвращаете?for
наmap
. Вы можете использоватьfor ... of
если хотите. Он должен работать. Если вы действительно хотели быструю производительность и готовы пожертвовать некоторой памятью, вы можете создать объект / карту, где ключи - это страны, а значения - это объекты из этих массивов. Это привело бы к поиску с постоянным временем, лишь немного увеличивая память, потому что объект / карта будет ссылаться на объекты в массиве, а не создавать новый объект.