You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查对象属性值?如何统计对象中属性特定值的出现次数?

嘿,让我来帮你搞定这两个问题!

问题1:如何检查对象的属性值?

检查对象属性值有几种常用的方式,根据场景选就行:

  • 点表示法:如果属性名是常规的(没有空格、特殊字符,不是JS关键字),直接用 . 访问,就像你例子里的 users.Ryan.online,直观又简单。
  • 方括号表示法:当属性名是变量、带特殊字符(比如user-name),或者需要动态获取时,就得用方括号,比如 obj[变量名],这在循环遍历对象键名时特别有用。
  • 先确认属性存在:如果不确定对象有没有某个属性,可以先用 '属性名' in obj 或者 obj.hasOwnProperty('属性名') 检查,避免访问不存在的属性报错。
问题2:修复统计online为true的代码问题

你当前的代码输出0,问题出在对象的访问方式上!咱们一步步看:
你写了 if (obj.user == true),这里的 obj.user 是在找 obj 里名为 user 的属性,但你的对象里根本没有这个属性——循环变量 user 存的是每个用户的键名(Alan、Jeff、Ryan),所以得用方括号 obj[user] 才能拿到当前遍历的用户对象,之后再访问它的 online 属性。

给你修正后的代码:

function countOnline(obj) {
  let count = 0;
  for (let user in obj) {
    // 用方括号获取当前用户对象,再判断online属性
    if (obj[user].online === true) {
      count++;
    }
  }
  return count;
}

let users = { Alan: { age: 27, online: false }, Jeff: { age: 32, online: true }, Ryan: { age: 19, online: true } };
console.log(countOnline(users)); // 现在会输出2,符合你的期望

另外,也可以用更简洁的现代JS写法,比如用 Object.values() 配合 reduce 统计:

function countOnline(obj) {
  // 先把对象的所有值转成数组,再累加online为true的数量
  return Object.values(obj).reduce((total, user) => {
    return user.online ? total + 1 : total;
  }, 0);
}

这个写法更紧凑,不需要手动写循环,可读性也不错。

内容的提问来源于stack exchange,提问作者A-Makeyev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:43:44