javascript - 动态访问嵌套对象
问题描述
我需要计算这个嵌套对象中的在线用户数,并返回总数。
我已经尝试过这段代码,但我有点迷路了
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 c = 0;
for (let i in obj) {
for (let j in i) {
if (j.online === true) {
c++;
}
}
}
return c;
}
它返回 0
解决方案
reduce
使用- 迭代对象可能会更好Object.values
,并将.online
值添加到累加器:
const users = {
Alan: {
age: 27,
online: false
},
Jeff: {
age: 32,
online: true
},
Sarah: {
age: 48,
online: false
},
Ryan: {
age: 19,
online: true
}
};
const usersOnline = Object.values(users).reduce((a, { online }) => a + online, 0);
console.log(usersOnline);
要修复您的原始代码,您只需要在 的每个属性上循环一次,不仅在users
每个嵌套属性的每个属性上循环一次(您只需要该属性)。您还需要访问,因为它是一个属性,而不是一个值:users
online
obj[i]
i
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 c = 0;
for (let i in obj) {
if (obj[i].online === true) {
c++;
}
}
return c;
}
console.log(countOnline(users));
推荐阅读
- cassandra - Janusgraph 删除顶点并提交完成,但下一个操作仍然看到顶点
- c# - 如何处理“类型''上的警告MVC1004属性与参数'同名”?
- node.js - 请求没有从 serveo.net 主机转发到我的本地主机
- ios - Apple MapKit 是否像 Google Places 一样具有唯一标识符?
- javascript - 如何阻止屏幕重新渲染 onChange 事件?
- matlab - 减少多边形的边数
- javascript - 有没有办法引用条件语句或循环的条件?
- java - NetBeans 依赖项副本如何工作以及它是否适用于两次嵌套的应用程序?
- c - 带有一些 if 语句的 while 循环获得超高数字
- python - 如何将新词向量添加到 gensim.models.keyedvectors 并计算 most_similar