You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并不同结构数组数据并关联产品名称与库存数量

问题分析

原代码的核心问题是没有建立两组数据的关联逻辑:

  • 直接把产品数组和库存数组拼接后遍历,只是分别处理各自元素,完全没通过product_id将产品名称与库存数量对应起来
  • 遍历逻辑仅针对库存数据的quantity字段,未查询产品数据中的product_name

再看数据结构细节:

  • 产品数组的每个元素直接包含product_id和product_name字段
  • 库存数组的每个元素是一个对象,键即为product_id,对应值包含quantity字段
解决方案

正确做法是先将产品数据转换成以product_id为键的映射表,快速通过ID查找产品名称,再遍历库存数据匹配对应信息:

async function getstockandproductinfo() {
  try {
    const stockinforesponse = await axios.get(`${BASE_URL}/stock?branch_id=0`, {
      headers: {'API-KEY': API_KEY}
    });
    const productinforesponse = await axios.get(`${BASE_URL}/products`, {
      headers: {'API-KEY': API_KEY}
    });
    const productdata = productinforesponse.data;
    const stocksdata = stockinforesponse.data;

    // 创建产品ID到名称的映射表
    const productMap = {};
    productdata.forEach(product => {
      productMap[product.product_id] = product.product_name;
    });

    // 遍历库存数据,匹配名称并输出目标格式
    stocksdata.forEach(stockItem => {
      for (const productId in stockItem) {
        const quantity = stockItem[productId].quantity;
        // 找不到对应产品时用兜底值
        const productName = productMap[productId] || '未知产品';
        console.log(`${productName}, ${quantity}`);
      }
    });

  } catch (error) {
    console.error('错误信息:', error);
  }
}

getstockandproductinfo();

代码说明

  1. 创建映射表:遍历产品数组,将product_id作为键、product_name作为值存入对象,后续通过ID查找名称的效率为O(1)
  2. 遍历库存数据:
    • 库存数组的每个元素是键为product_id的对象,用for...in遍历这些键
    • 通过productId从映射表中获取对应名称,无匹配时用「未知产品」兜底
    • 按要求输出「产品名称, 数量」格式
额外优化建议
  • 若产品数据量较大,用Map代替普通对象更安全(避免键名冲突,支持所有类型的键):
    const productMap = new Map();
    productdata.forEach(product => {
      productMap.set(product.product_id, product.product_name);
    });
    // 取值时使用 productMap.get(productId)
    
  • 可添加数据校验逻辑,比如判断库存中的productId是否存在于映射表,方便排查数据不一致问题

内容的提问来源于stack exchange,提问作者hikx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 16:25:09