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

如何按周期匹配为dispatch数组补全quantity为0的缺失月份项

发药记录月份补全实现方案

核心思路

不要直接在原有dispatch数组上做插入操作,直接以标准months配置数组为基准生成对齐后的新数组,从根源上避免索引错位、插入位置错误的问题。

实现步骤

  • 单条患者记录处理时,先将原有dispatch数组转换为以period为键的映射表,省去重复遍历查找的开销
  • 按原有顺序遍历标准months数组(本身为要求的时间倒序),逐个匹配映射表中的发药记录:
    • 匹配到对应period的记录时,直接将原记录放入结果数组
    • 未匹配到记录时,生成补全对象:month取对应月份配置的position值,year匹配配置的年份,quantity设为0,period与配置值保持一致,放入结果数组
  • 用生成的长度固定为7的结果数组替换原记录的dispatch字段即可,最终顺序与标准月份配置完全对齐

可直接运行的代码示例

function completeDispatch(records, standardMonths) {
  return records.map(record => {
    // 构建现有发药记录的映射表
    const dispatchMap = new Map();
    record.dispatch.forEach(item => {
      dispatchMap.set(item.period, item);
    });

    // 按标准月份顺序生成完整发药数组
    const fullDispatch = standardMonths.map(monthItem => {
      if (dispatchMap.has(monthItem.period)) {
        return dispatchMap.get(monthItem.period);
      }
      // 补全缺失月份的0值记录
      return {
        month: monthItem.position,
        year: monthItem.year,
        quantity: 0,
        period: monthItem.period
      };
    });

    return {
      ...record,
      dispatch: fullDispatch
    };
  });
}

// 调用方式:传入接口返回的records数组、7个月标准配置的months数组即可
// const result = completeDispatch(apiResponse.records, monthConfig.months);

之前插入逻辑失效的原因

直接在原dispatch数组上通过splice方法插入的写法很容易出错:原数组长度、元素顺序和标准月份不一致,遍历插入过程中原数组长度动态变化,会导致索引计算偏移,最终出现插入位置错误、漏插、重复插入的问题。基于标准配置生成新数组的写法完全规避了这类问题。

内容的提问来源于stack exchange,提问作者OCBP

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 01:39:18