JavaScript - 优化两个array.map循环

Mou*_*iri 1 javascript ecmascript-6

我必须迭代两个数组,如果iso第一个数组的属性等于address.country第二个数组条件被验证,slug则将地址和第二个数组(this.concessions)分配给第一个数组(this.countries).

最后,你需要一个this.countries包含addressslug属性的新数组(除了他已经拥有的属性)

this.countries.map((element) => {
  this.concessions.map((value) => {
    if (element.iso === value.address.country) {
      element.address = value.address
      element.slug = value.slug
    }
  })
})
Run Code Online (Sandbox Code Playgroud)

我如何优化它,例如,对于这种情况,最好的可迭代使用的for ..of是什么?

Jon*_*lms 5

只需使用地址映射:

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

所以现在寻找一个让步是O(1):

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

正如我们反复国家曾经和让步一次,时间复杂度为O(n + m)地方nm是数组的长度.然而,这种性能增益是在高内存使用的情况下实现的.