Код JavaScript для подсчета количества объектов в массиве объектов с использованием array.reduce()

var developers = [
    { name: "Joe", age: 23 ,overallLevel: "high"},
    { name: "Sue", age: 28 ,overallLevel: "advanced" },
    { name: "Jon", age: 32 ,overallLevel: "high" },
    { name: "Bob", age: 24 ,overallLevel: "high" },
    { name: "Bob", age: 20 ,overallLevel: "advanced" }
]

Требуется подсчет общего уровня в указанном массиве с использованием array.reduce() [высокий: 3, расширенный: 2]


person Saily Jadhav    schedule 01.06.2016    source источник
comment
Что вы уже пробовали? С какими проблемами вы сталкиваетесь? Вообще говоря, Fix this for me вопросы не очень хорошо воспринимаются.   -  person ste2425    schedule 01.06.2016
comment
jsfiddle.net/rdw26c3k   -  person adeneo    schedule 01.06.2016
comment
Вы можете использовать filter() и просто передать значение totalLevel для фильтрации. Чем вы могли бы просто подсчитать элементы в отфильтрованном массиве.   -  person Nemanja Todorovic    schedule 01.06.2016
comment
Возможный дубликат Найти количество вхождений заданное значение находится в массиве   -  person 1983    schedule 01.06.2016
comment
пожалуйста, взгляните на Что мне делать, когда кто-то ответит на мой вопрос?   -  person Nina Scholz    schedule 01.06.2016


Ответы (2)


Вы можете просто посчитать их с помощью объекта.

var developers = [{ name: "Joe", age: 23, overallLevel: "high" }, { name: "Sue", age: 28, overallLevel: "advanced" }, { name: "Jon", age: 32, overallLevel: "high" }, { name: "Bob", age: 24, overallLevel: "high" }, { name: "Bob", age: 20, overallLevel: "advanced" }],
    overallLevel = developers.reduce(function (r, a) {
        r[a.overallLevel] = (r[a.overallLevel] || 0) + 1;
        return r;
    }, {});

console.log(overallLevel);

person Nina Scholz    schedule 01.06.2016
comment
Не могли бы вы рассказать нам, как (r[a.overallLevel] || 0) + 1; будет оценивать - person Sandeep Nayak; 01.06.2016
comment
@SandeepNayak r[a.overallLevel] || 0 назначит ноль, если r[a.overallLevel] будет верным значением. Затем он добавит один к нему. - person ste2425; 01.06.2016

Попробуйте это (вам не нужно array.reduce() для этого):

var
  i,
  count = {high: 0, advanced: 0},
  developers = [
    { name: "Joe", age: 23 ,overallLevel: "high"},
    { name: "Sue", age: 28 ,overallLevel: "advanced" },
    { name: "Jon", age: 32 ,overallLevel: "high" },
    { name: "Bob", age: 24 ,overallLevel: "high" },
    { name: "Bob", age: 20 ,overallLevel: "advanced" }
  ];

for (i in developers) {

  count[developers[i].overallLevel]++;
}

alert(JSON.stringify(count)); //  Object { high=3,  advanced=2}

person Ali Mamedov    schedule 01.06.2016