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条经验 获得超7个赞
您用于 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 }}
]);
添加回答
举报