如何编写函数统计usuarios对象中online属性为true的布尔值数量
在线用户数统计实现方案
核心思路
拿到usuarios对象下所有的直接子成员,逐个校验子成员的online属性值是否严格为true,对符合条件的条目做计数累加即可。该实现完全匹配你给出的扁平结构对象,不会误统计嵌套层级内的属性。
参考实现代码
方式1:基础循环写法(全版本兼容)
function contarUsuariosOnline(usuarios) { let contador = 0; // 获取usuarios下所有直接子成员的键名 const listaClaves = Object.keys(usuarios); for (const clave of listaClaves) { // 严格判断online值为true才计数,避免误算 if (usuarios[clave].online === true) { contador++; } } return contador; }
方式2:数组reduce简洁写法
function contarUsuariosOnline(usuarios) { // 直接取出所有子成员的值做遍历,少一层键名取值的步骤 return Object.values(usuarios).reduce((total, usuario) => { return total + (usuario.online === true ? 1 : 0); }, 0); }
效果验证
用你给出的测试对象调用函数,最终返回的正确结果为2:
// 匹配你给出结构的测试对象 const usuarios = { toni: { edad: 33, online: true }, emi: { edad: 25, online: true }, fran: { edad: 25, online: false }, agus: { edad: 24, online: false } }; console.log(contarUsuariosOnline(usuarios)); // 控制台输出 2
注意事项
- 两种写法都做了严格值判断,只有
online属性的取值是布尔类型的true才会被计数,别图省事直接写if (usuario.online)做判断,万一后续代码改动出现online: 1、子成员缺失online属性的情况,很容易出现计数偏差 - 当前实现只遍历
usuarios的直接子成员,完全匹配你给出的单层结构示例,如果后续结构升级为多层嵌套的用户分组,只需要在判断分支里增加递归逻辑即可复用
内容的提问来源于stack exchange,提问作者Pago
相关产品推荐
相关产品推荐

