Группировать по json данным - PullRequest
0 голосов
/ 02 августа 2020

Я новичок в кодировании javascript, а также с данными json.

У меня есть этот код, и, прежде всего, я хочу сгруппировать по «неделям», но я хочу только суммировать столбец «resultat»

В столбце «Начало» я хочу показать первое значение, а в столбце «Slut» я хочу показать последнее значение.

Возможно ли это? И если, у кого-нибудь есть предложения, как?

1 Ответ

0 голосов
/ 03 августа 2020

Это код, который делает то, что вы ищете. Он не генерирует никаких элементов DOM, однако заботится обо всех logi c, кроме «процентов», поскольку вы не указали, что должно произойти с этим значением.

Подводя итог:

  1. Создайте массив, содержащий все «группы».
  2. Заполните этот массив сгруппированными неделями. Если неделя уже отслеживается, добавьте ее значение к объектам отслеживания data -Array, иначе создайте новую группу.
  3. Теперь просто переберите каждую группу, отобразите значение групп week и выполните лог. c для нахождения минимального (начало), максимального (шлюха) и суммированного (результат) значений. Все это можно сделать с помощью метода reduce.
  4. Журнал / Отображение результатов.
const { vecka } = { "vecka": [{ "week": "20-15", "start": 1000, "slut": 1019, "resultat": "19", "procent": "1.90" }, { "week": "20-15", "start": 1019, "slut": 1036, "resultat": "17", "procent": "1.67" }, { "week": "20-15", "start": 1036, "slut": 1060, "resultat": "24", "procent": "2.32" }, { "week": "20-15", "start": 1060, "slut": 1090, "resultat": "30", "procent": "2.83" }, { "week": "20-16", "start": 1090, "slut": 1121, "resultat": "31", "procent": "2.84" }] };

const sets = [];

for (let set of vecka) {
    // Find week if it is already tracked
    const trackedWeek = sets.filter(w => w.time == set.week)[0];

    if (!trackedWeek) {
        // If week is not already being tracked, create a new entry
        sets.push({ time: set.week, data: [set]});
    } else {
        // If week is already being tracked, add data to week
        trackedWeek.data.push(set);
    }
};

for (let set of sets) {
    // Find start
    const start = set.data.reduce((min, { start }) => {
        if (!min) return start;

        return min > start ? start : min;
    }, null);

    // Find end
    const end = set.data.reduce((max, { slut }) => {
        if (!max) return slut;

        return max < slut ? slut : max;
    }, null);

    // Accumulate resultat
    const resultat = set.data.reduce((acc, { resultat }) => (acc += parseInt(resultat)), 0);

    console.log("week: ", set.time);
    console.log("start: ", start);
    console.log("slut: ", end);
    console.log("resultat: ", resultat);
}

Надеюсь, это поможет. Взгляните на массивы и объекты и их методы. Обычно это все, что вам нужно для подобных манипуляций.

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