我必须迭代两个数组,如果第一个数组的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
?
答案 0 :(得分: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
是数组的长度。然而,这种性能提升是通过高内存使用来实现的。