技术问询:拆分主数组并重新合并,合并cart_details同ID子数组
解决方案:合并相同ID的Cart Details记录
我来帮你搞定这个数组合并的需求!核心目标就是把主数组中所有cart_details里ID相同的支付记录,归类到同一个父数组项的cart_details中,让同ID的记录都集中在一起。
步骤说明
- 先遍历主数组,把所有
cart_details子项按它们的id进行分组; - 再基于这些分组,重新构建最终的数组结构,每个分组对应一个父数组项,其
cart_details包含该ID下的所有支付记录; - 如果父数组项本身有其他需要保留的属性(比如用户信息、订单号等),我们可以选择保留首个出现的属性值,或者根据需求合并。
代码实现
假设你的主数组结构如下(模拟示例):
const originalArray = [ { parentId: "order_001", user: "Alice", cart_details: [ { id: 101, product: "Laptop", amount: 999, payment: "credit" }, { id: 102, product: "Mouse", amount: 29, payment: "debit" } ] }, { parentId: "order_002", user: "Bob", cart_details: [ { id: 101, product: "Laptop", amount: 899, payment: "paypal" }, { id: 103, product: "Keyboard", amount: 49, payment: "credit" } ] }, { parentId: "order_003", user: "Alice", cart_details: [ { id: 102, product: "Mouse", amount: 35, payment: "paypal" }, { id: 103, product: "Keyboard", amount: 59, payment: "debit" } ] } ];
下面是实现合并的代码:
// 1. 收集所有cart_details子项,按子项id分组 const groupedDetails = {}; originalArray.forEach(item => { item.cart_details.forEach(detail => { if (!groupedDetails[detail.id]) { // 初始化分组,同时保留父项的基础属性(这里取首个出现的父项属性) groupedDetails[detail.id] = { ...item, cart_details: [] }; } // 将当前子项加入对应分组的cart_details groupedDetails[detail.id].cart_details.push(detail); }); }); // 2. 将分组对象转换为数组,得到最终结果 const mergedArray = Object.values(groupedDetails); console.log(mergedArray);
结果说明
运行上述代码后,mergedArray中的每个元素都会对应一个cart_details子项ID,其cart_details数组包含所有该ID的支付记录,同时保留了父项的基础属性(比如user、parentId,这里取的是该ID首次出现时的父项属性,如果你需要合并父项属性,可以根据需求修改这部分逻辑)。
举个例子,ID为101的支付记录会被合并到一个父项中:
{ parentId: "order_001", user: "Alice", cart_details: [ { id: 101, product: "Laptop", amount: 999, payment: "credit" }, { id: 101, product: "Laptop", amount: 899, payment: "paypal" } ] }
如果你的父数组结构或者合并需求有细微调整(比如需要按父项ID合并而不是子项ID),可以随时沟通调整代码~
内容的提问来源于stack exchange,提问作者Mahdi98
相关产品推荐
相关产品推荐

