基于remainingQuantity拆分OriginTrade的数组处理技术求助
数组reduce处理交易数据的问题优化方案
核心修正点:你需要在reduce过程中按资产追踪当前活跃的OriginTrade,并在其剩余量≤0时强制创建新实例,而非一直复用旧实例。
以下是修正后的实现代码(以TypeScript为例):
// 假设基础类型定义 interface Trade { asset: string; quantity: number; } interface OriginTrade { asset: string; initialQuantity: number; remainingQuantity: number; linkedTrades: Trade[]; } function transformTrades(trades: Trade[]): OriginTrade[] { return trades.reduce((acc, currentTrade) => { const { result, activeOrigins } = acc; const currentAsset = currentTrade.asset; let activeOrigin = activeOrigins[currentAsset]; // 无活跃OriginTrade,或活跃实例剩余量≤0时,新建OriginTrade if (!activeOrigin || activeOrigin.remainingQuantity <= 0) { const newOrigin: OriginTrade = { asset: currentAsset, initialQuantity: currentTrade.quantity, remainingQuantity: currentTrade.quantity, linkedTrades: [] }; result.push(newOrigin); activeOrigins[currentAsset] = newOrigin; activeOrigin = newOrigin; } else { // 剩余量>0,加入关联交易并更新剩余量 activeOrigin.linkedTrades.push(currentTrade); activeOrigin.remainingQuantity -= currentTrade.quantity; } return acc; }, { result: [] as OriginTrade[], activeOrigins: {} as Record<string, OriginTrade> }).result; }
关键逻辑说明
- 用reduce累加器同时维护最终结果数组和按资产映射的活跃OriginTrade对象,避免每次遍历去结果数组中查找,既提升效率又保证逻辑准确
- 处理每笔交易前先检查对应资产的活跃实例状态:
- 不存在或剩余量≤0:直接新建OriginTrade,加入结果数组并更新活跃映射
- 剩余量>0:将当前交易加入关联列表,同时扣减剩余量
- 该逻辑严格遵循你提出的三条规则,能触发"剩余量归0/负数时新建OriginTrade"的分支,解决之前无法触发新建的问题
内容的提问来源于stack exchange,提问作者l3dger_0x
相关产品推荐
相关产品推荐

