首页 > 解决方案 > 动态访问嵌套对象

问题描述

我需要计算这个嵌套对象中的在线用户数,并返回总数。

我已经尝试过这段代码,但我有点迷路了

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

标签: javascriptobject

解决方案


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


推荐阅读