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

React JS多条件统计嵌套数组元素总数问题排查

问题描述

需要从给定的嵌套参与者数组中,统计同时满足以下两个条件的人员总数:

  • 参与者自身的Pocu属性值为"Da"
  • 参与者关联的Cursuri数组中,存在Nume属性值为"Contabilitate"的课程项

原有实现代码如下:

let popular = JSON.parse(`[
   {
     "id": "15f806ec-79cf-498f-8a4d-8bc8fdf8c43e",
     "Nume": "negrea",
     "Prenume": "ioana",
     "Pocu": "Da",
     "createdAt": "2022-04-27T13:17:05.000Z",
     "updatedAt": "2022-04-27T13:17:05.000Z",
     "deletedAt": null,
     "INDICATORI": [
       {
         "id": "068170b3-7995-41df-8fac-4f2bc577e2c6",
         "Nume": "4S110",
         "importHash": null         
       }
     ],
     "Cursuri": [
        {
         "id": "068170b3-7995-41df-8fac-4f2bc577e2c6",
         "Nume": "Contabilitate",
         "importHash": null
         }
       ]
   }
]`);
   

const count = popular.reduce((total, participant) => total + Math.min (participant.Cursuri
  .filter(indicator => indicator.Nume === "Contabilitate").length, popular
  .filter(indicator => indicator.Pocu === "Da").length), 0)

console.log(count);

运行上述代码得到的输出为85,但预期正确结果应为20。

问题根因

代码逻辑存在两处核心错误,直接导致统计结果失真:

  • 判断范围错误:遍历单个参与者时,反复对整个popular数组执行filter统计全量Pocu === "Da"的人数,完全没有判断当前遍历到的参与者自身的Pocu属性是否符合要求
  • 累加逻辑错误:错误使用Math.min取「当前参与者匹配Contabilitate的课程数量」和「全量Pocu符合条件的总人数」的最小值做累加,只要参与者有Contabilitate课程,就会累加一个远大于1的数值,最终结果自然严重偏大。
修复方案

调整reduce的判断逻辑,遍历每个参与者时仅针对当前对象做两个条件的校验,两个条件同时满足时计数加1即可,修复后代码如下:

const count = popular.reduce((total, participant) => {
  // 校验当前参与者Pocu属性是否符合要求
  const matchPocu = participant.Pocu === "Da";
  // 校验当前参与者是否关联了Contabilitate课程
  const matchCourse = participant.Cursuri.some(curs => curs.Nume === "Contabilitate");
  // 两个条件同时满足则总数+1,否则加0
  return total + (matchPocu && matchCourse ? 1 : 0);
}, 0);

console.log(count);

注:判断数组是否存在符合条件的项时,用some()比filter().length效率更高,找到第一个匹配项就会终止遍历,不需要遍历整个数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:24:15