Вы устанавливаете значение на 0
на каждой итерации цикла:
for(let user in users) {
//...
let countOnlineUsers = 0;
//...
}
Поскольку вы изменяете значение только один раз в этой итерации, оно может быть только 0
или 1
.Вместо этого установите значение перед в цикле:
let countOnlineUsers = 0;
for(let user in users) {
//...
}
Тогда каждая итерация цикла будет изменять одно и то же значение (если выполняется его условие) вместо того, чтобы всегда создавать новое значение.
(Обратите внимание, что у вас есть вложенные циклы, мне в основном приходилось угадывать, для какого из них вы хотите увеличить значение.)
Ваш оригинальный код с этой модификацией:
let users = {
Alan: {
age: 27,
online: false
},
Jeff: {
age: 32,
online: true
},
Sarah: {
age: 48,
online: false
},
Ryan: {
age: 19,
online: true
},
George: {
age: 32,
online: true
}
};
function countOnline(obj) {
let countOnlineUsers = 0;
for(let user in users) {
if (!users.hasOwnProperty(user)) continue; //Makes first check
let obj = users[user];
for(let prop in obj) {
if (!obj.hasOwnProperty(prop)) continue; //Makes second check
if(obj[prop] === true) {
countOnlineUsers++;
}
console.log(prop + " = " + obj[prop]);
console.log(countOnlineUsers);
}
}
}
console.log(countOnline(users));