为什么if语句无法执行?

时间:2019-06-24 23:40:47

标签: javascript json for-in-loop

我正在尝试返回此JS对象确定的在线用户数。但是,我针对当前在线用户的计数器永远不会增加。

我使用for-in循环遍历JS对象,然后如果特定用户的'online'属性设置为true,则增加'usersOnline'变量。

let users = {
  Alan: {
    age: 27,
    online: false
  },
  Jeff: {
    age: 32,
    online: true
  },
  Sarah: {
    age: 48,
    online: false
  },
  Ryan: {
    age: 19,
    online: true
  }
};

function countOnline(obj) {
  let usersOnline = 0;

  for (let user in obj) {
    if (user.online === true)
      usersOnline++;
  }

  return usersOnline;
}

console.log(countOnline(users));

usersOnline应该增加两次,使其等于2。但是它保持设置为0。这个问题是freeCodeCamp.com上的一个编码挑战的一部分。一般如何使用JS对象。

1 个答案:

答案 0 :(得分:0)

一种解决方案是reduce()对象的values() users,以获得在线用户总数:

let users = {
  Alan: {
    age: 27,
    online: false
  },
  Jeff: {
    age: 32,
    online: true
  },
  Sarah: {
    age: 48,
    online: false
  },
  Ryan: {
    age: 19,
    online: true
  }
};

const onlineCount = Object.values(users).reduce((total, user) => {
  /* If user is online, add 1 to the total, otherwise add 0 */
  return total + (user.online ? 1 : 0);
}, 0)

console.log(onlineCount)

reduce()的工作方式是从初始值0开始,然后迭代Object.values()返回的所有用户值,并向其中添加10以获取在线用户总数。