JavaScript - 优化两个array.map循环

时间:2018-01-12 14:03:25

标签: javascript ecmascript-6

我必须迭代两个数组,如果第一个数组的iso属性等于第二个数组条件的address.country,则分配第二个数组的地址和slugthis.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
    }
  })
})

如何对此进行优化,对于这种情况,最佳可迭代使用的是什么,例如for ..of

1 个答案:

答案 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),其中nm是数组的长度。然而,这种性能提升是通过高内存使用来实现的。