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

如何在JavaScript中为嵌套对象按同层级名称出现次数新增count统计字段

JavaScript 嵌套对象同层级name统计实现

实现思路

  • 递归遍历每一层级的节点数组,每层独立统计不跨级
  • 每层先使用Map统计当前所有name的出现次数,同时收集同name下的所有subName子节点
  • 对去重后的name生成新节点,赋值count后递归处理该name对应的所有subName合并后的子数组

完整实现代码

function countNestedNames(arr) {
  // 统计当前层的name计数,以及同name下的所有subName集合
  const nameStats = new Map();

  for (const item of arr) {
    const name = item.name;
    // 初始化统计项
    if (!nameStats.has(name)) {
      nameStats.set(name, {
        count: 0,
        subNames: []
      });
    }
    const stat = nameStats.get(name);
    // 当前层级name计数+1
    stat.count += 1;
    // 收集同name下的所有子节点后续统一处理
    if (item.subName?.length) {
      stat.subNames.push(...item.subName);
    }
  }

  // 生成当前层结果
  const result = [];
  for (const [name, stat] of nameStats.entries()) {
    const node = {
      name,
      count: stat.count,
      subName: stat.subNames.length ? countNestedNames(stat.subNames) : []
    };
    result.push(node);
  }
  return result;
}

测试验证

将示例输入传入方法即可得到匹配预期的输出:

// 示例输入
const input = [{
    name: 'rohan',
    subName: [{
        name: 'rohan_abc',
        subName: [{
            name: 'rohan_abc_abc',
            subName: []
        }]
    }, {
        name: 'rohan_abc',
        subName: []
    }, {
        name: 'rohan_abc_abc',
        subName: []
    }]
}, {
    name: 'rohan',
    subName: [{
        name: 'rohan_abc',
        subName: [{
            name: 'rohan_abc_abc',
            subName: [{
                name: 'rohan_abc_abc_abc',
                subName: []
            }]
        }]
    }, {
        name: 'rohan_bcd',
        subName: []
    }, {
        name: 'rohan_abc_abc',
        subName: []
    }]
}];

// 调用方法输出结果
console.log(JSON.stringify(countNestedNames(input), null, 2));

运行后输出结果和需求给出的预期结构完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:39:02