Как проверить значение свойства объекта? - PullRequest
0 голосов
/ 29 сентября 2019

Мне нужно узнать, сколько раз свойство имеет определенное значение в объекте.

Объект:

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

Мне нужно узнать, какмногие онлайн имеют значение true

Что я пробовал до сих пор:

function countOnline(obj) {
  let count = 0;
    for (let user in obj) {
      if (obj.user == true) {
      count++;
      }
    }
  return count;
}

console.log(countOnline(users)); // 0
console.log(users.Ryan.online); // true


console.log(countOnline(users)); // should return 2 as the number of online: true exists twice

Ответы [ 3 ]

2 голосов
/ 29 сентября 2019

Я бы reduce Object.values объекта, увеличивая накопитель, когда online истинно:

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

const onlineCount = Object.values(users).reduce((a, { online }) => a + online, 0);
console.log(onlineCount);

Чтобы исправить существующий код, измените тест на obj[user].online === true (или просто obj[user].online):

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

function countOnline(obj) {
  let count = 0;
  for (let user in obj) {
    if (obj[user].online === true) {
      count++;
    }
  }
  return count;
}

console.log(countOnline(users));
1 голос
/ 29 сентября 2019

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

let onlineUser  = Object.keys(users).filter(item => users[item].online).reduce((obj, key) => {
    obj[key] = users[key];
    return obj;
  }, {});

console.log("count:", Object.keys(onlineUser).length);
console.log("onlineUser:", onlineUser);
1 голос
/ 29 сентября 2019

Вам необходимо получить доступ к онлайн-свойству obj

if (obj[user].online == true) or if (obj[user].online)

Когда вы делаете obj.user, он пытается найти user свойство на obj, значение которого будет undefined, как мыУ вас нет какого-либо свойства с именем user на obj

Вы можете просто отфильтровать значения по онлайн-свойству и проверить длину

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


let count = Object.values(users)
                  .filter(({ online }) => online)
                  .length

console.log(count)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...