Как рассчитать идеальный и фактический ожог по графику выгорания - PullRequest
2 голосов
/ 11 марта 2019

Я пытаюсь вычислить данные для графика выживаемости для курса.Курс имеет даты начала и окончания, количество упражнений и фактические даты начала и окончания обучения.У меня есть данные JSON с сервера с данными курса.Я обрабатываю это.Прежде всего, я вычисляю totalExcercisesCount, а затем подсчитываю количество дней, в течение которых студент заканчивает курс.В конце концов я получаю следующий объект данных:

const chartDataObj = {
  idealBurn: [],
  actualBurn: [],
  idealIncrement: 0,
  totalExcercisesCount: 12,
  totalExercisesDoneCount: 4,
  timeLine: {
    courseFrom: "2018-09-10",
    courseTo: "2019-06-21",
    start: "2018-09-11",
    finish: "2018-10-01",
    totalDays: 20,
  }
}

После того, как я строю идеальную линию, и здесь возникает первая проблема.Я пытаюсь сделать следующее:

chartDataObj.idealIncrement = Math.floor(
chartDataObj.timeLine.totalDays / chartDataObj.totalExcercisesCount
);

for (i = 0; i <= chartDataObj.timeLine.totalDays - 1; i++) {
  chartDataObj.idealBurn.push(chartDataObj.idealIncrement * (i + 1));
}
chartDataObj.idealBurn.reverse();

Проблема в том, что если количество дней намного больше, чем упражнений, у меня неправильный идеальный ожог.enter image description here

Мне нужно выполнить 12 упражнений, но на второй день это выглядит как 19. Что я здесь не так делаю?

А потом мне нужнозаполните фактические данные записи.Но проблема в том, как заполнить его согласно датам выполнения упражнения и показать его на графике?Я имею в виду, что в моем последнем объекте dataObject у меня есть только totalExercisesDoneCount, но в начальном JSON у меня есть информация о датах завершения упражнений.Должен ли я сгруппировать их по датам или нет?

У меня также есть codepen , подготовленный с диаграммой и всем кодом.Любая помощь будет оценена.Thanx

1 Ответ

0 голосов
/ 13 марта 2019

У меня есть 12 упражнений для выполнения, но на второй день это выглядит как 19. Что я здесь не так делаю?

Ваш расчет для calculateIdealIncrement имеет 2 проблемы.Вы рассчитываете дни на упражнение ... это должны быть упражнения в день, т.е. сколько упражнений в идеале нужно выполнять каждый день, чтобы достичь идеального ожога.Также вместо того, чтобы использовать floor для округления до целого числа, вы должны оставить его в виде дроби, если результат, например, 0,5 упражнения в день, то это нормально.

А затем мне нужно заполнить фактический ожогданные.Но проблема в том, как заполнить его согласно датам выполнения упражнения и показать его на графике?Я имею в виду, что в моем последнем объекте dataObject у меня есть только totalExercisesDoneCount, но в начальном JSON у меня есть информация о датах завершения упражнений.Должен ли я сгруппировать их по датам или нет?

Есть несколько способов, которыми вы можете подойти к этому.Я бы не использовал группирование по подходу, потому что (1) он неправильно обращается к вложенному exercise_details (2) вы не хотите группировать по дате, вы хотите получить разницу в днях между датой начала и датой завершения упражнения,Поэтому я бы начал с кода, аналогичного getRemainExercisesCount, где вы получаете доступ к каждому finished_time, получаете разность с датой начала, строите массив, в котором хранится количество выполненных упражнений каждый день, а затем используйте его для заполнения фактического массива записи.

...