Как рассчитать итоговое значение с помощью метода limit () (ES6)? - PullRequest
0 голосов
/ 01 июля 2018

У меня есть данные, которые имеют массив season и fielding. Массив fielding имеет 3 параметра Catches, Runouts, Stumpings. Я хочу вычислить сумму Catches, Stumpings, Runouts.

var data = [
    {
    season:2015,
    fielding:{Catches:2, Runouts:1, Stumpings:1
    },
    {
    season:2016,
    fielding:{Catches:0, Runouts:1, Stumpings:1
    },
    {
    season:2016,
    fielding:{Catches:0, Runouts:0, Stumpings:0
    },
    {
    season:2017,
    fielding:{Catches:1, Runouts:3, Stumpings:1
    },
    {
    season:2017,
    fielding:{Catches:2, Runouts:1, Stumpings:2
    }
]

Я хочу получить окончательный вывод как объект:

Catches -> 2+0+0+1+2 = 5
Runouts -> 1+1+0+3+1 = 6
Stumpings -> 1+1+0+1+2 =5

Что я пробовал:

let dismissals = data.reduce( (a,{season, fielding})  => {

            if(!a[fielding.Catches]){
                a[fielding.Catches] = {};
            }else if(a[fielding.Runouts]){
                a[fielding.Runouts] = {};
            }else if(a[fielding.Stumpings]){
                a[fielding.Stumpings] = {};
            }else{
                a[fielding.Stumpings] += 1;
                a[fielding.Runouts] += 1;
                a[fielding.Catches] += 1;
            }

            return a;
        }, {});

Мой код не рассчитывает требуемый вывод и выдает NaN.

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Вы можете использовать Reduce и зацикливать fielding Object.keys

const res = data.reduce((a, {fielding}) =>
    Object.keys(fielding).forEach(f => a[f] = (a[f] || 0) + fielding[f]) || a
, Object.create(null));

console.log(res);
<script>
var data = [
    {
        season:2015,
        fielding:{Catches:2, Runouts:1, Stumpings:1}
    },
    {
        season:2016,
        fielding:{Catches:0, Runouts:1, Stumpings:1}
    },
    {
        season:2016,
        fielding:{Catches:0, Runouts:0, Stumpings:0}
    },
    {
        season:2017,
        fielding:{Catches:1, Runouts:3, Stumpings:1}
    },
    {
        season:2017,
        fielding:{Catches:2, Runouts:1, Stumpings:2}
    }
];

</script>
0 голосов
/ 01 июля 2018

Переберите записи из fielding и добавьте значение к [ключу] в аккумуляторе (по умолчанию 0, если ключ еще не существует):

var data=[{season:2015,fielding:{Catches:2,Runouts:1,Stumpings:1}},{season:2016,fielding:{Catches:0,Runouts:1,Stumpings:1}},{season:2016,fielding:{Catches:0,Runouts:0,Stumpings:0}},{season:2017,fielding:{Catches:1,Runouts:3,Stumpings:1}},{season:2017,fielding:{Catches:2,Runouts:1,Stumpings:2}}];

console.log(
  data.reduce((a, { fielding }) => {
    Object.entries(fielding).forEach(([key, val]) => {
      if (key !== '_id') a[key] = (a[key] || 0) + val;
    });
    return a;
  }, {})
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...