如何将累加quantity的orderItems拆分为对应数量的独立对象数组?
拆分订单项为独立商品对象的实现方案
原订单项数组中,商品项通过quantity字段累加数量,需要将每个项拆分为对应数量的独立对象,仅保留商品名称、描述和价格信息。
JavaScript 实现
const orderItems = [ { "id": "cla7dnfln000mvprgde8b9ovh", "name": null, "price": 134, "quantity": 3, "orderId": "cla7dmh5v000ivprghh27g22z", "menuItemId": "cl9t45hry002uvpr9sp9jxl1t", "comments": null, "stock": null, "menuItem": { "id": "cl9t45hry002uvpr9sp9jxl1t", "image": "https://madre-cafe.com/wp-content/uploads/2021/11/logo-madre-cafe-header.svg", "name": "Especiales Item #2", "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", "price": "134", "available": true, "menuCategoryId": "cl9t45hqu000tvpr9fjw67ype" } }, { "id": "cla8ehie20000vpusxqvp0kcq", "name": null, "price": 223, "quantity": 1, "orderId": "cla7dmh5v000ivprghh27g22z", "menuItemId": "cl9t45hry0010vpr9q3pjo2kc", "comments": null, "stock": null, "menuItem": { "id": "cl9t45hry0010vpr9q3pjo2kc", "image": "https://madre-cafe.com/wp-content/uploads/2021/11/logo-madre-cafe-header.svg", "name": "Hot Cakes Item #2", "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", "price": "223", "available": true, "menuCategoryId": "cl9t45hqu000nvpr9pwqkk3gj" } } ]; const splitOrderItems = orderItems.flatMap(item => { // 根据quantity生成对应数量的商品对象 return Array.from({ length: item.quantity }, () => ({ name: item.menuItem.name, description: item.menuItem.description, price: item.menuItem.price })); }); console.log(JSON.stringify(splitOrderItems, null, 2));
代码说明
- 使用
flatMap遍历原数组,同时将每个项生成的子数组展开,避免嵌套结果 Array.from({ length: item.quantity })构造一个长度等于quantity的数组,用于生成对应数量的独立对象- 每个新对象仅保留
menuItem中的name、description、price三个目标属性
Python 实现
import json order_items = [ { "id": "cla7dnfln000mvprgde8b9ovh", "name": None, "price": 134, "quantity": 3, "orderId": "cla7dmh5v000ivprghh27g22z", "menuItemId": "cl9t45hry002uvpr9sp9jxl1t", "comments": None, "stock": None, "menuItem": { "id": "cl9t45hry002uvpr9sp9jxl1t", "image": "https://madre-cafe.com/wp-content/uploads/2021/11/logo-madre-cafe-header.svg", "name": "Especiales Item #2", "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", "price": "134", "available": True, "menuCategoryId": "cl9t45hqu000tvpr9fjw67ype" } }, { "id": "cla8ehie20000vpusxqvp0kcq", "name": None, "price": 223, "quantity": 1, "orderId": "cla7dmh5v000ivprghh27g22z", "menuItemId": "cl9t45hry0010vpr9q3pjo2kc", "comments": None, "stock": None, "menuItem": { "id": "cl9t45hry0010vpr9q3pjo2kc", "image": "https://madre-cafe.com/wp-content/uploads/2021/11/logo-madre-cafe-header.svg", "name": "Hot Cakes Item #2", "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", "price": "223", "available": True, "menuCategoryId": "cl9t45hqu000nvpr9pwqkk3gj" } } ] split_order_items = [] for item in order_items: # 循环quantity次,生成对应数量的独立商品对象 for _ in range(item["quantity"]): split_order_items.append({ "name": item["menuItem"]["name"], "description": item["menuItem"]["description"], "price": item["menuItem"]["price"] }) print(json.dumps(split_order_items, indent=2))
代码说明
- 外层循环遍历所有订单项,内层循环根据
quantity数值重复创建商品对象 - 每次内层循环生成一个仅包含目标属性的新对象,并添加到结果数组中
内容的提问来源于stack exchange,提问作者Qoomit
相关产品推荐
相关产品推荐

