js заполнить пропуски в объекте с датами

Делаю расширение для vscode, которое будет собирать статистику продуктивности. Вот: Productivity-checker Мне нужно собирать статистику за месяц. Например: пользователь открыл файл server.php. В объект files добавился новый ключ - server.php А в объект server.php записались данные за сегодня(обновляются каждую секунду)

files['server.php'][getCurrentDate()] = {workTime: 0...}

Через 2 дня пользователь снова зашел в этот файл, добавилась еще одна дата в объект

Но чтобы составить статистику за месяц, нужны данные за месяц, а здесь только за 2 дня и не подряд.

Нужно написать функцию, которая заполняла объект датами (типа '12/01/2020' : {some data}) так, чтобы в объекте было всегда 30 дат, то есть статистика ровно за месяц. Чтобы функция учитывала пробелы в датах (например, есть данные за 25 число и за 27. Нужно заполнить объект 27ю датами до 25 числа и датой 12/26/2020)

Данные такого вида

"server.php": {
  "12/25/2020": {
    "workTime": 453,
    "freeTime": 10,
    "date": 0,
    "keyCount": 0,
    "language": "php",
  },
  "12/27/2020": {
    "workTime": 4593,
    "freeTime": 54,
    "date": 0,
    "keyCount": 0,
    "language": "php",
  }
}


Ответы (1 шт):

Автор решения: Color kat

function getFileData(project, filename) {
  labelsData = [];
  viewData = {
    workTime: [],
    freeTime: [],
    totalTime: [],
    keyCount: [],
    cash: []
  };

  // pull chart data
  for (let day = 0; day < 30; day++) {
    // get current date as string
    let date_str = new Date(getCurrentDate());
    // get dates for month as string
    let date = getCurrentDate(new Date(date_str.setDate(date_str.getDate() - day)));

    let currentFile = filesData[project][filename][date];

    // data is not defined - set empty data
    if (!currentFile) {
      viewData['workTime'].push(0);
      viewData['freeTime'].push(0);
      viewData['totalTime'].push(0);
      viewData['keyCount'].push(0);
      viewData['cash'].push(0);
    } else {
      viewData['workTime'].push(currentFile.workTime);
      viewData['freeTime'].push(currentFile.freeTime);
      viewData['totalTime'].push(currentFile.freeTime + currentFile.workTime);
      viewData['keyCount'].push(currentFile.keyCount);

      let cash = 0;
      viewData['cash'].push(cash);
    }

    // add date to labels
    labelsData.push(date);
  }
}

→ Ссылка