为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

跃然一笑 2023-03-03 10:51:50
这是我的代码,我试图用 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);
查看完整描述

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


查看完整回答
反对 回复 2023-03-03
?
凤凰求蛊

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


查看完整回答
反对 回复 2023-03-03
?
慕仙森

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 }}

    ]);


查看完整回答
反对 回复 2023-03-03
  • 3 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信