如果项目满足条件,如何读取嵌套对象中的属性和 return 编号?

How do I read properties in a nested object and return number if items that meet a condition?

我有下面的代码,对我来说看起来不错,但保持 returning 为 0。我需要遍历用户对象中的命名用户和 return 的用户总数在线 属性 值为真。

我试过将 newUser 变量更改为一个数组,并将用户推送到该在线数组中,该数组的值为 true,然后 return 计算数组的长度并 return s 0 也是。


    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) {
      // change code below this line
      const newUser = 0;

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

      return newUser;
      // change code above this line
    }

    console.log(countOnline(users));

我期待 for-in 循环遍历用户对象中的用户,如果有一个 属性 的 online 值为 true 每次都会将 newUser 变量递增 1 并且然后 return 值为 2 的 newUser 变量。但它保持 returning 0.

您可以交替使用 Array.filter;

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

let new_user_count = Object.keys(users).filter(x => users[x].online).length;
console.log(new_user_count);

您正在迭代一个对象,并希望它的行为像数组一样。

考虑到您正在迭代一个对象,您的代码应该如下所示:

   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) {
      // change code below this line
      let newUser = 0;

      for (let user of Object.values(obj)) {
        if (user.online === true) {
          newUser++;
        }
      }

      return newUser;
      // change code above this line
    }

    console.log(countOnline(users));

还请记住,您在更改时将 newUser 声明为 const,因此正确的做法是使用 let 声明它。

您可以使用 Array.reduce 将用户数组缩减为一个数字

const count = Object.keys(users).reduce((accum, username) => users[username].online ? accum + 1 : accum, 0)

或Array.filter获取在线用户过滤数组的长度

const count = Object.keys(users).filter(username => users[username].online).length;

o(n) 解决方案,无需将对象键转换为数组

let count = 0
for (const username in users) {
   count = users[username].online ? count + 1 : count
}
return count

使用 const 而不是 let。维护函数 countUsersOnline .

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

const countUsersOnline = (users) => Object.keys(users).filter(x => users[x].online).length;

console.log(countUsersOnline(users));
countOnline(users)
{
   var a = 0;
   for(let user in users){ 
     if(users[user].online) 
       ++a; 
   }
   return a;
}

该函数将检查对象中的每个对象是否在线属性如果为真则它将增加在线用户的计数标志