You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 11:52:40