JS Как хранить данные в объекте на каждый момент времени

У меня есть данные такого типа

let data = {
  'myProject' : {
    'index.html' : {
      workTime: 1234,
      freeTime: 324,
      keys: 460
    },
    'index.js' : {
      workTime: 6444,
      freeTime: 345
      keys: 4029
    }
  }
}

Эти данные обновляются каждую секунду. И мне нужно сделать так, чтобы можно было доставать эти данные по дате. Например, 31 декабря workTime = 7890, а 1 января workTime = 120.

Как это можно сделать?


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

Автор решения: Pavel Grishaev

Можно сделать у каждого экземпляра этих данных числовой ключ - timestamp в секундах (как Math.round(Date.now() / 1000)). И потом перебором находить этот объект по его ключу согласно требуемому времени или например от полночи начала нужного дня до полночи его завершения минус секунда. Где это всё хранить уже другой вопрос, например в json при выходе из приложения, и загружать при старте.

Что-то вроде этого:

let data = {
  'myProject': {
    'index.html': [
      {
        timestamp: 1608753541,
        workTime: 1234,
        freeTime: 324,
        keys: 460
      },
      {
        timestamp: 1608753542,
        workTime: 1235,
        freeTime: 323,
        keys: 459
      }
    ],
    'index.js': [
      {
        timestamp: 1608753541,
        workTime: 6444,
        freeTime: 345,
        keys: 4029
      },
      {
        timestamp: 1608753542,
        workTime: 6444,
        freeTime: 345,
        keys: 4029
      },
      {
        timestamp: 1608753543,
        workTime: 6444,
        freeTime: 345,
        keys: 4029
      }
    ]
  }
}

function getOneDataItem( pageName, timestamp ){
  return data.myProject[pageName].find( item => item.timestamp === timestamp );
};

console.log( getOneDataItem( 'index.html', 1608753542 ) );

→ Ссылка