如何合并不同结构数组数据并关联产品名称与库存数量
问题分析
原代码的核心问题是没有建立两组数据的关联逻辑:
- 直接把产品数组和库存数组拼接后遍历,只是分别处理各自元素,完全没通过
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();
代码说明
- 创建映射表:遍历产品数组,将
product_id作为键、product_name作为值存入对象,后续通过ID查找名称的效率为O(1) - 遍历库存数据:
- 库存数组的每个元素是键为
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
相关产品推荐
相关产品推荐

