JavaScript-优化两个array.map循环

JavaScript-优化两个array.map循环,javascript,ecmascript-6,Javascript,Ecmascript 6,我必须迭代两个数组,如果第一个数组的iso属性等于address.country,则验证第二个数组的条件,将第二个数组的地址和slug this.countries分配给第一个数组this.countries 最后,您需要有一个新的this.countries数组,该数组除了包含已有的属性外,还包含地址和slug属性 this.countries.map((element) => { this.concessions.map((value) => { if (elemen

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

最后,您需要有一个新的this.countries数组,该数组除了包含已有的属性外,还包含地址和slug属性

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

我怎样才能优化它,在这种情况下,什么是最适合使用的,例如…?

只需使用地址映射:

 const dataByCountry = new Map();
 for(var {address, slug} of this.concessions)
    dataByCountry.set(address.country, {address, slug});
因此,现在查找特许权是O1:


当我们迭代国家一次和特许权一次时,时间复杂度为+m,其中n和m是数组的长度。但是,这种性能提高是通过高内存使用率实现的。

只需使用地址映射:

 const dataByCountry = new Map();
 for(var {address, slug} of this.concessions)
    dataByCountry.set(address.country, {address, slug});
因此,现在查找特许权是O1:


当我们迭代国家一次和特许权一次时,时间复杂度为+m,其中n和m是数组的长度。但是,这种性能提高是通过高内存使用率实现的。

如果不返回任何内容,为什么要使用map?好吧,您的算法在^2上。因此,它不会很好地扩展。我建议在地图上使用for循环。你可以用。。。当然,如果你愿意的话。它应该会起作用。如果您确实想要快速性能,并且愿意牺牲一些内存,那么可以制作一个对象/映射,其中键是国家,值是这些数组中的对象。这将引入固定时间查找,只会稍微增加内存,因为对象/映射将引用数组中的对象,而不是创建新对象。如果不返回任何内容,为什么要使用映射?好吧,您的算法在^2上。因此,它不会很好地扩展。我建议在地图上使用for循环。你可以用。。。当然,如果你愿意的话。它应该会起作用。如果您确实想要快速性能,并且愿意牺牲一些内存,那么可以制作一个对象/映射,其中键是国家,值是这些数组中的对象。这将引入固定时间查找,只会稍微增加内存,因为对象/贴图将引用数组中的对象,而不是创建新对象。好的一面是,对于这种策略,他可以保留数组,而贴图将只引用数组中的对象,而不是创建新的对象。这也意味着他可以创建不同的映射,以允许对多个属性进行固定时间的查找,而无需将占用的内存量增加一倍或三倍。好的一面是,对于这种策略,他可以保留数组,映射将只引用数组中的对象,而不是创建新的对象。这也意味着他可以创建不同的映射,以允许对多个属性进行恒定时间的查找,而不需要将占用的内存量增加一倍或三倍。