合并数组重复订单:按order_id合并products数组与order_type
合并相同order_id的订单条目
可以通过遍历订单数组,借助临时对象分组并合并相同order_id的订单条目,以下是具体实现:
const orders = [ { "order_details": {}, "order_id": "1", "order_status": "Pending", "order_type": "drugs", "products": [{"name": "product xyz"}] }, { "order_details": {}, "order_id": "2", "order_status": "Pending", "order_type": "Prescriptions", "products": [{"name": "product abc"}] }, { "order_details": {}, "order_id": "1", "order_status": "Pending", "order_type": "goods", "products": [{"name": "product ghj"}] } ]; // 临时映射,按order_id分组存储合并中的订单 const mergedMap = {}; orders.forEach(order => { const { order_id } = order; if (!mergedMap[order_id]) { // 首次遇到该order_id,初始化合并对象 mergedMap[order_id] = { ...order }; // 用数组存储order_type,方便后续去重和拼接 mergedMap[order_id].order_type = [order.order_type]; // 复制products数组避免引用问题 mergedMap[order_id].products = [...order.products]; } else { // 合并products数组 mergedMap[order_id].products.push(...order.products); // 添加新的order_type并去重 if (!mergedMap[order_id].order_type.includes(order.order_type)) { mergedMap[order_id].order_type.push(order.order_type); } } }); // 转换为最终数组格式,将order_type转为"a & b"字符串 const mergedOrders = Object.values(mergedMap).map(item => ({ ...item, order_type: item.order_type.join(" & ") })); console.log(mergedOrders);
关键说明:
- 用
mergedMap按order_id分组,避免重复遍历,提升处理效率 - 对
order_type用数组存储并去重,确保同一类型不会重复拼接 - 采用浅拷贝处理订单对象和数组,若订单包含深层嵌套结构(如
order_details有复杂字段),可替换为深拷贝(比如JSON.parse(JSON.stringify(order)))
运行代码后即可得到你期望的合并结果。
内容的提问来源于stack exchange,提问作者David Zagi
相关产品推荐
相关产品推荐

