3 回答

TA貢獻1836條經驗 獲得超5個贊
您正在嘗試獲取user應該是用戶名的屬性。在迭代對象鍵時使用[user]而不是。.user.
請參閱下面的固定代碼段:
function countOnline(usersObj) {
let amount=0;
for(let user in usersObj){
if(usersObj[user].online){ // <-- see, I placed user in [ ]
amount++;
}
}
return amount;
}
let a = countOnline({
Alan: { online: false },
Jeff: { online: true },
Sarah: { online: false }
});
console.log(a);
替代解決方案
您可以以更簡潔和可讀的方式迭代對象值,例如使用Object.values() method,這將返回您案例中所有用戶的數組,因此您只需要減少它。
function countOnline(usersObj) {
return Object.values(usersObj).reduce((total, user) => user.online ? total + 1 : total, 0)
}
let a = countOnline({
Alan: { online: false },
Jeff: { online: true },
Sarah: { online: false }
});
console.log(a);
甚至更短,但性能更差:
let usersObj = {
Alan: { online: false },
Jeff: { online: true },
Sarah: { online: false }
};
let onlineCount = Object.values(usersObj).filter(u => u.online).length;
console.log(onlineCount);

TA貢獻1825條經驗 獲得超4個贊
您正在嘗試訪問userObj.user.online,而它應該是userObj[user].online:
function countOnline(users) {
let amount = 0;
for (const user in users) {
if (users[user].online) {
amount++;
}
}
return amount;
}
const a = countOnline({
Alan: {
online: false
},
Jeff: {
online: true
},
Sarah: {
online: false
}
});
console.log(a);
function countOnline(usersObj) {
let amount=0;
for(let user in usersObj){
if(usersObj.online){
amount++;
}
}
return amount;
}
let a = countOnline({ Alan: { online: false }, Jeff: { online: true }, Sarah: { online: false } });
console.log(a);

TA貢獻1827條經驗 獲得超8個贊
您用于 in.dictionary 不像數組那樣可迭代。你需要鑰匙,價值。試試這個。
function countOnline(usersObj) {
let amount=0;
for (const [key, value] of Object.entries(usersObj)) {
if(value.online){
amount++;
}
}
return amount;
}
let a = countOnline({
Alan: { online: false },
Jeff: { online: true },
Sarah: { online: false }
});
console.log(a);
展開片段for in如果您想在代碼中使用循環,請這樣做
let a = countOnline([
{Alan: { online: false }},
{Jeff: { online: true }},
{Sarah: { online: false }}
]);
添加回答
舉報