这是我的代码,我试图通过countOnline函数来计算有多少在线用户。
我收到错误“无法读取未定义的属性'online'” ;
function countOnline(usersObj) {
let amount=0;
for(let user in usersObj){
if(usersObj.user.online){
amount++;
}
}
return amount;
}
let a = countOnline({
Alan: { online: false },
Jeff: { online: true },
Sarah: { online: false }
});
console.log(a);
答案 0 :(得分:2)
您正在尝试访问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);
答案 1 :(得分:2)
您正在尝试获取属性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);
答案 2 :(得分:0)
您用于in。字典不像数组那样可迭代。您需要关键,价值。 尝试一下。
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 }}
]);