Angular中如何汇总同商品不同批次的StockOnHand总和?
汇总同一商品不同批次的StockOnHand总数
我通过API获取了可用库存列表,结构如下:
{ "Total": 4, "Page": 1, "ProductAvailabilityList": [ { "ID": "53350e22-0a89-4bdd-b11c-90bb3315dbe1", "SKU": "test product 1", "Name": "Test product 1", "Barcode": null, "Location": "Main Warehouse", "Bin": null, "Batch": null, "ExpiryDate": null, "OnHand": 0, "Allocated": 1, "Available": 1, "OnOrder": 0, "StockOnHand": 0 }, { "ID": "92a8c8fd-318e-455a-945c-8c5f588c055e", "SKU": "test product 2", "Name": "Test product 2", "Barcode": null, "Location": "Main Warehouse", "Bin": null, "Batch": null, "ExpiryDate": null, "OnHand": 0, "Allocated": 1, "Available": 1, "OnOrder": 0, "StockOnHand": 0 }, { "ID": "a2bd1fc5-f52c-4005-89a7-b9fdb4f180e1", "SKU": "test product 3", "Name": "Test product 3", "Barcode": null, "Location": "Main Warehouse", "Bin": null, "Batch": null, "ExpiryDate": null, "OnHand": 0, "Allocated": 1, "Available": 1, "OnOrder": 0, "StockOnHand": 0 }, { "ID": "3e14fcbc-6e80-4c36-8c2c-36e29f79e192", "SKU": "test product 4", "Name": "Test product 4", "Barcode": null, "Location": "Main Warehouse", "Bin": null, "Batch": null, "ExpiryDate": null, "OnHand": 0, "Allocated": 5, "Available": 2, "OnOrder": 0, "StockOnHand": 0 } ] }
需求是汇总特定商品的StockOnHand总数,但同一商品若有不同Batch编号,会被拆分成不同的数组项,直接统计会出现重复或遗漏。
解决方案:按商品唯一标识分组累加
通过按SKU(优先使用SKU,因其通常是商品的唯一标识,也可根据需求换成Name)分组,再累加每个分组内的StockOnHand数值,即可得到商品的总库存数。
JavaScript实现示例
// 假设API返回的库存数据已存入response变量 const inventoryItems = response.ProductAvailabilityList; // 按SKU分组并汇总StockOnHand const totalStockBySKU = inventoryItems.reduce((result, item) => { const sku = item.SKU; if (!result[sku]) { result[sku] = { SKU: sku, Name: item.Name, TotalStockOnHand: 0 }; } result[sku].TotalStockOnHand += item.StockOnHand; return result; }, {}); // 转换为数组格式便于展示或后续处理 const aggregatedStockList = Object.values(totalStockBySKU); console.log(aggregatedStockList);
Python实现示例
# 假设API返回的库存数据已存入inventory_list变量 inventory_list = response['ProductAvailabilityList'] total_stock_by_sku = {} for item in inventory_list: sku = item['SKU'] if sku not in total_stock_by_sku: total_stock_by_sku[sku] = { 'SKU': sku, 'Name': item['Name'], 'TotalStockOnHand': 0 } total_stock_by_sku[sku]['TotalStockOnHand'] += item['StockOnHand'] # 转换为列表格式 aggregated_stock_list = list(total_stock_by_sku.values()) print(aggregated_stock_list)
扩展说明
如果需要更精细的分组(比如同一SKU不同仓库分开统计),只需修改分组键的生成逻辑:
- JavaScript:
const key =${item.SKU}-${item.Location}; - Python:
key = f"{item['SKU']}-{item['Location']}"
内容的提问来源于stack exchange,提问作者Paul's Homemade
相关产品推荐
相关产品推荐

