gpt4 book ai didi

javascript - 无法读取未定义的属性 'online'

转载 作者:行者123 更新时间:2023-12-03 07:04:55 25 4
gpt4 key购买 nike

这是我的代码,我尝试使用 countOnline 函数计算我们有多少在线用户。

我遇到错误“无法读取未定义的‘在线’属性”

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);

最佳答案

您正在尝试获取属性 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);

关于javascript - 无法读取未定义的属性 'online',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63884138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com