Javascript 是否搜索一个数组中的对象属性值并将其替换为第二个数组中的对象属性值?

Javascript 是否搜索一个数组中的对象属性值并将其替换为第二个数组中的对象属性值?,javascript,for-loop,search,Javascript,For Loop,Search,我有两个对象数组,比如1-variants和2-inventoryLevel。两个数组中的对象共享一个属性,即id。因此,如果每个变量的id与任何inventoryLevel匹配,我想搜索每个变量。我想在匹配的inventoryLevel属性可用的情况下更改其名为shopify\u inventory\u quantity的属性吗?我的话有点让人困惑,但看看下面的代码,基本上它做得很好,我只想知道它现在能优化吗?它是嵌套的循环。因此,如果有人能帮助我们提高效率,我们将不胜感激 for (let

我有两个对象数组,比如1-variants和2-inventoryLevel。两个数组中的对象共享一个属性,即id。因此,如果每个变量的id与任何inventoryLevel匹配,我想搜索每个变量。我想在匹配的inventoryLevel属性可用的情况下更改其名为shopify\u inventory\u quantity的属性吗?我的话有点让人困惑,但看看下面的代码,基本上它做得很好,我只想知道它现在能优化吗?它是嵌套的循环。因此,如果有人能帮助我们提高效率,我们将不胜感激

for (let i = 0; i < variants.length; i++) {
  for (let j = 0; j < inventorylevels.length; j++) {
    if (variants[i].id === inventorylevels[j].variant_id) {
      variants[i].shopify_inventory_quantity = inventorylevels[j].available;
    }
  }
}
for(设i=0;i
我知道您在
O(n²)
中有一个解决方案。假设您的ID是唯一的,您可以将时间复杂度降低到
O(n)
(基本上是@Alireza评论的):

var变量=[
{id:0,shopify\库存\数量:0},
{id:1,shopify\库存\数量:0},
{id:2,shopify\库存\数量:0}
];
变量库存水平=[
{id:0,可用:10},
{id:1,可用:2},
{id:2,可用:3}
];
//O(n)+O(n)=O(n)
函数getAvailableVariants(v,i){
//O(n)
var inventoryLevel=i.reduce(函数(inventoryLevel,inventoryLevel){
inventoryLevel[inventoryLevel.id]=inventoryLevel;
返回库存水平;
}, {});
//O(n)
返回v.map(variant=>Object.assign(variant,{shopify_inventory_quantity:inventoryLevel[variant.id].available});
}
var results=document.createElement('pre');
results.textContent=JSON.stringify(getAvailableVariants(variants,InventoryLevel),null,'\t');

文件.正文.附件(结果)我知道您在
O(n²)
中有一个解决方案。假设您的ID是唯一的,您可以将时间复杂度降低到
O(n)
(基本上是@Alireza评论的):

var变量=[
{id:0,shopify\库存\数量:0},
{id:1,shopify\库存\数量:0},
{id:2,shopify\库存\数量:0}
];
变量库存水平=[
{id:0,可用:10},
{id:1,可用:2},
{id:2,可用:3}
];
//O(n)+O(n)=O(n)
函数getAvailableVariants(v,i){
//O(n)
var inventoryLevel=i.reduce(函数(inventoryLevel,inventoryLevel){
inventoryLevel[inventoryLevel.id]=inventoryLevel;
返回库存水平;
}, {});
//O(n)
返回v.map(variant=>Object.assign(variant,{shopify_inventory_quantity:inventoryLevel[variant.id].available});
}
var results=document.createElement('pre');
results.textContent=JSON.stringify(getAvailableVariants(variants,InventoryLevel),null,'\t');

文件.正文.附件(结果)为了更好地理解,您需要提供一些示例数据,但为了更好地理解这些数据,在这些情况下,通常的方法是以空间换取时间。这非常有帮助,尤其是当您需要多次搜索,并且一些数据准备工作值得费心的时候。你要做的是创建一个用于查找的hashmap,将时间复杂度降低到O(n)。为了更好地理解,你需要提供一些示例数据,但对于它的价值,在这些情况下,通常的方法是以空间换取时间。这非常有帮助,尤其是当您需要多次搜索,并且一些数据准备工作值得费心的时候。您要做的是为查找创建一个hashmap,将时间复杂度降低到O(n)。