JavaScript-код для извлечения диапазона дат из массива объектов в зависимости от одного атрибута массива с помощью array.reduce()

var developers = [
{ name: "Joe", age: 23, overallLevel: "high", date: "Aug 14, 2015" },
{ name: "Sue", age: 28, overallLevel: "advanced", date: "Aug 11, 2015" },
{ name: "Jon", age: 32, overallLevel: "high", date: "Aug 10, 2015" },
{ name: "Bob", age: 24, overallLevel: "high", date: "Sept 07, 2015" },
{ name: "Johnson", age: 23, overallLevel: "advanced", date: "Aug 20, 2015" },
{ name: "Paul", age: 25, overallLevel: "basic", date: "Jan 30, 2016" },
{ name: "Jane", age: 27, overallLevel: "intermediate", date: "Aug 30, 2016" },
{ name: "Chris", age: 20, overallLevel: "basic", date: "Aug 1, 2016" },
{ name: "Susan", age: 25, overallLevel: "basic", date: "Dec 12, 2015" },
{ name: "Jenny", age: 23, overallLevel: "intermediate", date: "Aug 30, 2016" },
{ name: "Stone", age: 25, overallLevel: "basic", date: "June 13, 2016" },
]

Ниже приведены данные, извлеченные из массива, которые указывают уровни, за которыми следуют их даты.

"высокий": 10 августа 2015 г., 14 августа 2015 г., 7 сентября 2015 г.

"продвинутый": 11 августа 2015 г., 20 августа 2015 г.

"базовый": 30 января 2016 г., 1 августа 2016 г., 12 декабря 2015 г., 13 июня 2016 г.,

"средний": 30 августа 2016 г., 30 августа 2016 г.

Ожидаемый результат: Требуется диапазон минимальной и максимальной даты, т.е. показан далее

{максимум: 10 августа 2015 г. - 07 сентября 2015 г., продвинутый уровень: 11 августа 2015 г. - 20 августа 2015 г., базовый уровень: 12 декабря 2015 г. - 1 016 августа 2015 г., промежуточный уровень: 30 января 2016 г.}

Это то, что я смог получить для общего уровня.

var developers = [
{ name: "Joe", age: 23, overallLevel: "high", date: "Aug 14, 2015" },
{ name: "Sue", age: 28, overallLevel: "advanced", date: "Aug 11, 2015" },
{ name: "Jon", age: 32, overallLevel: "high", date: "Aug 10, 2015" },
{ name: "Bob", age: 24, overallLevel: "high", date: "Sept 07, 2015" },
{ name: "Johnson", age: 23, overallLevel: "advanced", date: "Aug 20, 2015" },
{ name: "Paul", age: 25, overallLevel: "basic", date: "Jan 30, 2016" },
{ name: "Jane", age: 27, overallLevel: "intermediate", date: "Aug 30, 2016" },
{ name: "Chris", age: 20, overallLevel: "basic", date: "Aug 1, 2016" },
{ name: "Susan", age: 25, overallLevel: "basic", date: "Dec 12, 2015" },
{ name: "Jenny", age: 23, overallLevel: "intermediate", date: "Aug 30, 2016" },
{ name: "Stone", age: 25, overallLevel: "basic", date: "June 13, 2016" },
],
    overallLevel = developers.reduce(function (r, a) {
        r[a.overallLevel] = (r[a.overallLevel] || 0) + 1;
        return r;
    }, {});

console.log(overallLevel);

Пожалуйста, посетите это: https://jsfiddle.net/Saily/6nzxd6ss/

1 ответ

Мне также нравится использовать уменьшает. Это очень удобно для многих случаев.

var developers = [
{ name: "Joe", age: 23, overallLevel: "high", date: "Aug 14, 2015" },
{ name: "Sue", age: 28, overallLevel: "advanced", date: "Aug 11, 2015" },
{ name: "Jon", age: 32, overallLevel: "high", date: "Aug 10, 2015" },
{ name: "Bob", age: 24, overallLevel: "high", date: "Sept 07, 2015" },
{ name: "Johnson", age: 23, overallLevel: "advanced", date: "Aug 20, 2015" },
{ name: "Paul", age: 25, overallLevel: "basic", date: "Jan 30, 2016" },
{ name: "Jane", age: 27, overallLevel: "intermediate", date: "Aug 30, 2016" },
{ name: "Chris", age: 20, overallLevel: "basic", date: "Aug 1, 2016" },
{ name: "Susan", age: 25, overallLevel: "basic", date: "Dec 12, 2015" },
{ name: "Jenny", age: 23, overallLevel: "intermediate", date: "Aug 30, 2016" },
{ name: "Stone", age: 25, overallLevel: "basic", date: "June 13, 2016" },
],
reduced = developers.reduce((p,c) => {var d = new Date(c.date);
                                      p[c.overallLevel] ? d < p[c.overallLevel][0] && d < p[c.overallLevel][1] ? p[c.overallLevel][0] = d
                                                                                                               : p[c.overallLevel][1] = d
                                                        : p[c.overallLevel] = [d,d];
                                      return p},{});
reduced = Object.keys(reduced).reduce((p,c) => (p[c] = p[c].map(e => e.toDateString(2)), p),reduced);
       
console.log(reduced);

Другие вопросы по тегам