JavaScript 按用户名字段统计数组内作者博文数量的实现方法
问题原因
你写的统计逻辑存在两个问题:
- 直接将遍历拿到的对象类型元素
el作为计数对象的键,JavaScript会自动把对象转成字符串[object Object],所有条目都会被归到同一个键下,最终只输出总条目数。 - 你提前做了作者去重生成
uniqueAuthorsList,这个列表里每个作者只保留1条记录,遍历这个列表计数永远只能得到每个作者计数为1的结果,根本统计不到实际发文量。
修正方案
直接基于全量博文查询结果authorsList做统计,取每条记录里的author.username作为计数键即可,代码如下:
const counts = {}; authorsList.forEach(detail => { const username = detail.author.username; // 已存在对应作者计数就+1,不存在就初始化为1 counts[username] = counts[username] ? counts[username] + 1 : 1; }); // 按你需要的格式打印结果 for (const [authorName, postCount] of Object.entries(counts)) { console.log(`${authorName}: ${postCount}`); }
运行后控制台输出就会和预期一致:
Dave: 4 Emily: 7 Mark: 2
如果你后续需要用到去重的作者ID、用户名映射,可以在统计完成后再通过Object.keys(counts)结合原始数据生成,不用提前做去重遍历减少冗余计算。
内容的提问来源于stack exchange,提问作者PYP
相关产品推荐
相关产品推荐

