JavaScript遍历数组统计封禁/未封禁用户数代码问题
问题原因
你的代码统计结果错误的核心问题有2个:
- 计数变量
NotBanned和BannedUsers都定义在了循环体内部,每次遍历单条用户数据时,变量都会被重新赋值为0,之前累加的数值会被直接覆盖,最终永远只能得到0或1的结果,无法完成全量数据累加 - 统计封禁用户的循环中,日志打印文案错误写为"Not Banned",会干扰调试判断

正确实现代码
不需要两次遍历数组,单次遍历即可完成两类用户统计,性能更好:
// 计数器必须定义在循环外部,初始化值为0 let bannedUserCount = 0; let notBannedUserCount = 0; for (const userItem of res.data.data) { if (userItem.banned === true) { bannedUserCount++; } else if (userItem.banned === false) { notBannedUserCount++; } // 若存在banned为null/undefined等异常状态,可在此处新增分支单独统计 } console.log('封禁用户总数:', bannedUserCount); console.log('未封禁用户总数:', notBannedUserCount);
如果偏好函数式写法,也可以用reduce方法实现:
const countResult = res.data.data.reduce( (res, userItem) => { if (userItem.banned === true) { res.banned += 1; } else if (userItem.banned === false) { res.notBanned += 1; } return res; }, { banned: 0, notBanned: 0 } ); // 直接取countResult.banned、countResult.notBanned即可得到统计值
注意:如果接口返回的
banned字段不是布尔类型(比如你提到的标记为字符串"banned"的情况),需要把判断条件替换为对应的值匹配逻辑,例如userItem.banned === 'banned',避免因类型不一致导致判断失效。
内容的提问来源于stack exchange,提问作者Emmanuel Gabriel
相关产品推荐
相关产品推荐

