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

如何遍历三级嵌套数组统计Passed/Failed状态数量?支持多JS方案

统计嵌套数组中Passed/Failed状态的数量

我来帮你搞定这个统计需求!针对你的三级嵌套数组,我给你准备了几种不同的实现方案,你可以根据自己的技术栈和习惯选择:

原生JavaScript方案

这个方案不需要额外依赖,用原生数组方法就能轻松实现,思路是先把多层嵌套数组“拍平”成一维数组,再过滤出包含result字段的对象,最后统计对应状态的数量:

function addData(data) {
  var postotal = data.posreports.length;
  $('#posTotal').append(postotal);
  let posreports = data.posreports;

  // 统计逻辑开始
  // 把所有层级的嵌套数组拍平成一维数组
  const flattened = posreports.flat(Infinity);
  // 初始化统计对象,遍历数组统计数量
  const statusCount = flattened.reduce((acc, item) => {
    // 只处理带有result字段的对象,跳过空对象
    if (item.result) {
      acc[item.result] = (acc[item.result] || 0) + 1;
    }
    return acc;
  }, { Passed: 0, Failed: 0 });

  console.log("状态统计结果:", statusCount);
  // 这里可以把结果渲染到UI上,比如:
  // $('#passedCount').text(statusCount.Passed);
  // $('#failedCount').text(statusCount.Failed);
}
  • 代码说明:flat(Infinity)会自动处理所有层级的嵌套数组,不管你是三级还是更多级;reduce方法用来遍历数组,遇到带有result字段的对象时,对应状态的计数就加1,空对象会被自动跳过。

Ramda.js方案

如果已经引入了Ramda.js,函数式风格的写法会更简洁优雅,非常适合处理这种嵌套数据的场景:

function addData(data) {
  var postotal = data.posreports.length;
  $('#posTotal').append(postotal);
  let posreports = data.posreports;

  // 统计逻辑开始
  const statusCount = R.pipe(
    R.flatten, // 拍平所有层级的嵌套数组
    R.filter(R.has('result')), // 过滤出包含result字段的对象
    R.countBy(R.prop('result')) // 按result字段的值分组统计数量
  )(posreports);

  // 确保没有数据的状态默认显示0,避免出现undefined
  const finalCount = R.merge({ Passed: 0, Failed: 0 }, statusCount);
  
  console.log("状态统计结果:", finalCount);
  // 渲染到UI的示例代码:
  // $('#passedCount').text(finalCount.Passed);
  // $('#failedCount').text(finalCount.Failed);
}
  • 代码说明:Ramda的pipe方法会把多个函数串联起来,前一个函数的输出作为后一个的输入;R.has('result')用来判断对象是否包含result字段,R.countBy(R.prop('result'))会自动按result的值分组计数;最后用R.merge补充默认值,保证即使某个状态没有数据,也会显示0而不是undefined。

验证示例数据

用你提供的示例数组测试,两种方案都会得到相同的结果:

{ Passed: 7, Failed: 5 }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:54:19