У меня есть объект того, кто придет на мероприятие
{ "Ann": true, "Billy": false, "Cat": false, "David": true }
Как я могу посчитать количество присутствующих?
object.values.length, чтобы получить общее количество людей



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать Объект.значения и уменьшать
Вот идея
let obj = { "Ann": true, "Billy": false, "Cat": false, "David": true }
let count = Object.values(obj).reduce((op,inp) => op + inp , 0)
console.info(count)Не могли бы вы объяснить, что такое (op,inp)=>op+(+inp),0 ?
@susuwatari это функция стрелки с неявным возвратом. это просто добавляет значение к op и возвращает op. обратите внимание здесь (+inp) используется для преобразования boolean в digit
@susuwatari есть еще несколько способов преобразования логического значения в цифры, такие как Number или ~~boolean или + и т. д.
object.values.length to get the total number of people
Фильтр вне false значений:
const obj = {"Ann": true, "Billy": false, "Cat": false,"David": true};
console.info(
Object.values(obj).filter(Boolean).length
);Если вы хотите получить имена присутствующих людей, вы можете сделать что-то вроде этого:
const obj = {"Ann": true, "Billy": false, "Cat": false,"David": true};
const attendees = Object.entries(obj)
.filter(entry => entry[1])
.map(entry => entry[0]);
console.info(attendees);
console.info(attendees.length);На заметку: во втором примере я думаю, что reduce лучший вариант, чем использование фильтра и карты.
В современных средах вы можете использовать цикл for-of для массива, возвращаемого Object.values:
let sum = 0;
for (const flag of Object.values(yourObject)) {
if (flag) {
++sum;
}
}
const yourObject = { "Ann": true, "Billy": false, "Cat": false, "David": true };
let sum = 0;
for (const flag of Object.values(yourObject)) {
if (flag) {
++sum;
}
}
console.info(sum);или reduce на нем:
const sum = Object.values(yourObject).reduce((sum, flag) => sum + (flag ? 1 : 0), 0);
const yourObject = { "Ann": true, "Billy": false, "Cat": false, "David": true };
const sum = Object.values(yourObject).reduce((sum, flag) => sum + (flag ? 1 : 0), 0);
console.info(sum);В более старых средах вы можете использовать for-in:
var sum = 0;
for (var key in yourObject) {
if (yourObject[key]) {
++sum;
}
}
var yourObject = { "Ann": true, "Billy": false, "Cat": false, "David": true };
var sum = 0;
for (var key in yourObject) {
if (yourObject[key]) {
++sum;
}
}
console.info(sum);Вы можете сделать это разными способами. Вот с фильтром...
let obj = { "Ann": true, "Billy": false, "Cat": false, "David": true }
Object.values(obj).filter( person => person === true).length
Вы можете подсчитать логическое значение, которое приводится к числу.
var object = { Ann: true, Billy: false, Cat: false, David: true },
count = Object.values(object).reduce((a, b) => a + b, 0);
console.info(count);почему проголосовали? кажется лучшим ответом, нет необходимости в приведении типов с использованием + добавление уже делает свою работу. +1 Однако нет необходимости передавать начальное значение, цикл начнется с 1 и примет 0 в качестве начального значения.
корт?? Вы имеете в виду счет?