无法读取未定义的“在线”属性

这是我的代码,我试图用 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);


跃然一笑
浏览 92回答 3
3回答

一只甜甜圈

您正在尝试获取user应该是用户名的属性。在迭代对象键时使用[user]而不是。.user.请参阅下面的固定代码段:function countOnline(usersObj) {&nbsp; &nbsp;let amount=0;&nbsp; &nbsp;for(let user in usersObj){&nbsp; &nbsp; &nbsp;if(usersObj[user].online){ // <-- see, I placed user in [ ]&nbsp; &nbsp; &nbsp; &nbsp;amount++;&nbsp; &nbsp; &nbsp;}&nbsp; &nbsp;}&nbsp; &nbsp;return amount;&nbsp;}&nbsp; &nbsp;&nbsp;let a = countOnline({&nbsp; &nbsp;Alan: { online: false },&nbsp; &nbsp;Jeff: { online: true },&nbsp; &nbsp;Sarah: { online: false }&nbsp;});&nbsp; &nbsp;&nbsp;console.log(a);替代解决方案您可以以更简洁和可读的方式迭代对象值,例如使用Object.values() method,这将返回您案例中所有用户的数组,因此您只需要减少它。function countOnline(usersObj) {&nbsp; &nbsp;return Object.values(usersObj).reduce((total, user) => user.online ? total + 1 : total, 0)}&nbsp; &nbsp;&nbsp;let a = countOnline({&nbsp; &nbsp;Alan: { online: false },&nbsp; &nbsp;Jeff: { online: true },&nbsp; &nbsp;Sarah: { online: false }&nbsp;});&nbsp; &nbsp;&nbsp;console.log(a);甚至更短,但性能更差:let usersObj = {&nbsp; &nbsp;Alan: { online: false },&nbsp; &nbsp;Jeff: { online: true },&nbsp; &nbsp;Sarah: { online: false }&nbsp;};let onlineCount = Object.values(usersObj).filter(u => u.online).length;console.log(onlineCount);

凤凰求蛊

您正在尝试访问userObj.user.online,而它应该是userObj[user].online:function countOnline(users) {&nbsp; let amount = 0;&nbsp;&nbsp;&nbsp; for (const user in users) {&nbsp; &nbsp; if (users[user].online) {&nbsp; &nbsp; &nbsp; amount++;&nbsp; &nbsp; }&nbsp; }&nbsp; return amount;}const a = countOnline({&nbsp; Alan: {&nbsp; &nbsp; online: false&nbsp; },&nbsp; Jeff: {&nbsp; &nbsp; online: true&nbsp; },&nbsp; Sarah: {&nbsp; &nbsp; online: false&nbsp; }});console.log(a);function countOnline(usersObj) {&nbsp;&nbsp;&nbsp; let amount=0;&nbsp; for(let user in usersObj){&nbsp; &nbsp; if(usersObj.online){&nbsp; &nbsp; &nbsp; amount++;&nbsp; &nbsp; }&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; }&nbsp; return amount;&nbsp;&nbsp;}let a = countOnline({ Alan: { online: false }, Jeff: { online: true }, Sarah: { online: false } });console.log(a);

慕仙森

您用于 in.dictionary 不像数组那样可迭代。你需要钥匙,价值。试试这个。function countOnline(usersObj) {&nbsp; let amount=0;for (const [key, value] of Object.entries(usersObj)) {&nbsp; &nbsp; if(value.online){&nbsp; &nbsp; &nbsp; &nbsp; amount++;&nbsp; &nbsp; }}&nbsp; return amount;}let a = countOnline({&nbsp; Alan: { online: false },&nbsp; Jeff: { online: true },&nbsp; Sarah: { online: false }});console.log(a);展开片段for in如果您想在代码中使用循环,请这样做let a = countOnline([&nbsp; &nbsp; &nbsp; {Alan: { online: false }},&nbsp; &nbsp; &nbsp; {Jeff: { online: true }},&nbsp; &nbsp; &nbsp; {Sarah: { online: false }}&nbsp; &nbsp; ]);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript