Как сгенерировать недостающие данные для интервала дат?

Есть массив объектов с данными для отрисовки графика.
Есть переменные startDate и endDate в строковом формате.
На графике необходимо отрисовать эти данные, но рисовать нужно отрезок с учётом переменных startDate и endDate.
Как это сделать - нужно запушить в массив с данными элементы с пустыми значениями.

Исходный массив:

const widgetData = [
  {name: "something", value: 14, date: "02.08.2018"},
  {name: "something", value: 43, date: "03.08.2018"},
  {name: "something", value: 44, date: "04.08.2018"},
  {name: "something", value: 38, date: "05.08.2018"}
];

Переменные с датами:

let startDate = '01.08.2018';
let endDate = '25.08.2018';

У меня есть momentjs, но что-то нет всей картины как действовать.

Получиться должно:

[
  {name: "something", value: 0, date: "01.08.2018"},
  {name: "something", value: 14, date: "02.08.2018"},
  {name: "something", value: 43, date: "03.08.2018"},
  {name: "something", value: 44, date: "04.08.2018"},
  {name: "something", value: 38, date: "05.08.2018"},
  {name: "something", value: 0, date: "06.08.2018"}
  ...
]
  • Вопрос задан
  • 112 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const widgetData = [
  { name: 'something', value: 14, date: '02.08.2018' },
  { name: 'something', value: 43, date: '03.08.2018' },
  { name: 'something', value: 44, date: '04.08.2018' },
  { name: 'something', value: 38, date: '05.08.2018' },
];

const startDate = '01.08.2018';
const endDate = '25.08.2018';


const widgetDataObj = widgetData.reduce((acc, n) => (acc[n.date] = n, acc), {});
const start = new Date(startDate.split('.').reverse().join('-'));
const end = new Date(endDate.split('.').reverse().join('-'));
const result = [];

for (; start <= end; start.setDate(start.getDate() + 1)) {
  const date = start.toLocaleDateString('ru-RU');

  result.push(widgetDataObj[date] || {
    name: 'something',
    value: 0,
    date,
  });
}

console.log(result);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы