如何通过parent_product_id关联合并parent_product与variation_product列表
问题
我的variation_product包含parent_product_id属性,想要通过匹配该属性,把parent_product和variation_product合并成单一列表,具体怎么实现?
注:原始提供的JSON存在重复键的无效问题,实际有效JSON需将同键数组合并,修正后的数据结构如下:
{ "parent_product": [ { "parent_product_id": "sku01", "product_title": "product1" }, { "parent_product_id": "sku02", "product_title": "product2" } ], "variation_product": [ { "variation_product_id": "001", "parent_product_id": "sku01", "user_id": "1" }, { "variation_product_id": "002", "parent_product_id": "sku02", "user_id": "2" } ] }
预期合并结果:
{ "parent_product": [ { "parent_product_id": "sku01", "product_title": "product1", "variation_product_id": "001", "user_id": "1" }, { "parent_product_id": "sku02", "product_title": "product2", "variation_product_id": "002", "user_id": "2" } ] }
解决方案
以JavaScript为例,通过以下步骤实现合并:
基础实现方案
- 遍历
parent_product数组,对每个父产品,在variation_product中找到parent_product_id匹配的变体产品; - 合并父产品与匹配到的变体产品的属性,生成新对象;
- 收集所有合并后的对象,组成最终结果。
代码示例:
// 修正后的原始数据 const rawData = { "parent_product": [ { "parent_product_id": "sku01", "product_title": "product1" }, { "parent_product_id": "sku02", "product_title": "product2" } ], "variation_product": [ { "variation_product_id": "001", "parent_product_id": "sku01", "user_id": "1" }, { "variation_product_id": "002", "parent_product_id": "sku02", "user_id": "2" } ] }; // 执行合并 const mergedResult = { parent_product: rawData.parent_product.map(parent => { const matchedVariation = rawData.variation_product.find(v => v.parent_product_id === parent.parent_product_id); return { ...parent, ...matchedVariation }; }) }; console.log(JSON.stringify(mergedResult, null, 2));
大数据量优化方案
如果数据量较大,可先将variation_product转为以parent_product_id为键的映射表,把查找操作的时间复杂度从O(n)降为O(1):
// 构建变体产品映射表 const variationMap = rawData.variation_product.reduce((map, item) => { map[item.parent_product_id] = item; return map; }, {}); // 执行合并 const mergedResult = { parent_product: rawData.parent_product.map(parent => ({ ...parent, ...variationMap[parent.parent_product_id] })) };
内容的提问来源于stack exchange,提问作者boyenec
相关产品推荐
相关产品推荐

