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
相关产品推荐
相关产品推荐

