我正在尝试返回此JS对象确定的在线用户数。但是,我针对当前在线用户的计数器永远不会增加。
我使用for-in循环遍历JS对象,然后如果特定用户的'online'属性设置为true,则增加'usersOnline'变量。
let users = {
Alan: {
age: 27,
online: false
},
Jeff: {
age: 32,
online: true
},
Sarah: {
age: 48,
online: false
},
Ryan: {
age: 19,
online: true
}
};
function countOnline(obj) {
let usersOnline = 0;
for (let user in obj) {
if (user.online === true)
usersOnline++;
}
return usersOnline;
}
console.log(countOnline(users));
usersOnline应该增加两次,使其等于2。但是它保持设置为0。这个问题是freeCodeCamp.com上的一个编码挑战的一部分。一般如何使用JS对象。
答案 0 :(得分:0)
一种解决方案是reduce()
对象的values()
users
,以获得在线用户总数:
let users = {
Alan: {
age: 27,
online: false
},
Jeff: {
age: 32,
online: true
},
Sarah: {
age: 48,
online: false
},
Ryan: {
age: 19,
online: true
}
};
const onlineCount = Object.values(users).reduce((total, user) => {
/* If user is online, add 1 to the total, otherwise add 0 */
return total + (user.online ? 1 : 0);
}, 0)
console.log(onlineCount)
reduce()
的工作方式是从初始值0
开始,然后迭代Object.values()
返回的所有用户值,并向其中添加1
或0
以获取在线用户总数。