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

TypeScript中自定义MyObject类型数组按名称分组统计数量如何实现

实现方案

前提说明

你的自定义MyObject类型需要提供获取分类名称的方法,示例中每个条目第一个值为分类名称,实际使用时可根据你的类结构选择获取方式:

  • 如果名称是类的公开属性,直接取item.name即可
  • 如果是通过索引存储的字段,可通过item.get(0)获取
  • 如果有对应的Getter方法,调用对应方法比如item.getCategory()即可

完整补充代码

private groupByObjects() {
  //this read all data in array allData[] from service
  this.dataService.retrieveData().subscribe(allData => {
    // 初始化Map存储每个名称的计数
    const countMap = new Map<string, number>();

    allData.forEach(item => {
      // 替换为你实际获取分类名称的逻辑
      const name = item.get(0);
      countMap.set(name, (countMap.get(name) || 0) + 1);
    });

    // 转换为{name, count}格式的结果数组
    const groupResult = Array.from(countMap.entries()).map(([name, count]) => ({
      name,
      count
    }));

    // 如需输出你示例的对齐表格格式,添加以下代码
    console.log('name  |count');
    groupResult.forEach(({name, count}) => {
      console.log(`${name.padEnd(6)}| ${count}`);
    });

    // 后续可直接使用groupResult做渲染、传参等操作
  });
}

逻辑说明

  • 用Map作为计数容器,键为分类名称,值为对应出现次数,相比普通对象有更好的类型安全性,也能避免原生对象内置属性的冲突问题
  • 遍历所有数据条目,每命中一个分类就给对应计数+1,分类首次出现时默认计数为0再累加
  • 最后将Map转为数组格式的分组结果,适配后续大部分使用场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:45:04