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

使用Array Reduce分组数组元素时LINES数组重复项处理问询

合并嵌套数组中的重复LINE条目

看起来你已经用reduce实现了按PO编号分组的嵌套数组,但遇到了同PO下重复LINE条目的问题——这是因为当前代码没有做重复校验,直接把所有条目都push进LINES数组了。咱们可以调整一下reduce的逻辑,先检查是否已有相同的LINE条目,再决定是合并字段还是新增条目:

let result = Object.values(response.data.reduce((r, { PO_NO, PO_LINE_NO, MATERIAL_NO, MATERIAL_NAME, PO_QTY, GRPO_QTY, GRPO_SHIPDATE }) => {
  // 确保当前PO的容器对象存在
  r[PO_NO] = r[PO_NO] || { PO_NO, LINES: [] };
  
  // 查找当前PO下是否已有相同LINE_NO的条目
  const existingLine = r[PO_NO].LINES.find(line => line.LINE_NO === PO_LINE_NO);
  
  if (existingLine) {
    // 如果存在重复条目,按需合并字段
    // 这里以累加GRPO_QTY为例,你可以根据业务需求调整逻辑
    existingLine.GRPO_QTY += GRPO_QTY;
    // 比如如果需要更新为最新的发货日期,就加上这行:
    // existingLine.GRPO_SHIPDATE = GRPO_SHIPDATE;
  } else {
    // 如果没有重复,添加新的LINE条目
    r[PO_NO].LINES.push({
      LINE_NO: PO_LINE_NO,
      PO_QTY: PO_QTY,
      MATERIAL_NO: MATERIAL_NO,
      MATERIAL_NAME: MATERIAL_NAME,
      GRPO_QTY: GRPO_QTY,
      GRPO_SHIPDATE: GRPO_SHIPDATE
    });
  }
  
  return r;
}, {}));

关键逻辑说明:

  • 用Array.find()检查当前PO的LINES数组中,是否已经存在和当前条目LINE_NO相同的记录
  • 如果找到重复条目,就根据业务需求合并字段:比如累加入库数量GRPO_QTY,或者更新为最新的发货日期等
  • 如果没有找到重复,再执行push操作添加新条目

自定义重复判断规则:

如果你的重复判断依据不只是LINE_NO(比如需要结合MATERIAL_NO一起判断),只需要修改find的条件即可:

// 同时匹配LINE_NO和MATERIAL_NO
const existingLine = r[PO_NO].LINES.find(line => 
  line.LINE_NO === PO_LINE_NO && line.MATERIAL_NO === MATERIAL_NO
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:57:07