Заполнить массив объектов с датами между 2 датами - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть массив объектов, таких как:

const dates = [
  {date: "Jul 06 2018", count: 10},
  {date: "Jul 08 2018", count: 1},
  {date: "Jul 10 2018", count: 120},
];

Я работаю с eachDay и функциями date-fns для генерации и «обратной засыпки» всех дат, которые существуют между первой и последней датами для данного массива.

eachDay(
  dates[0].date,
  dates.slice(-1)[0].date,
)
  .map(d => ({
    x: d.dateCollected,
    y: dates
      .filter(e => d.dateCollected === format(e, 'MMM DD YYYY')),
  }));

Этот код возвращает все даты, но я не могу получить значение count из исходногомассив в массив «с обратной загрузкой».

Ожидаемый результат:

const result =  = [
  {x: "Jul 06 2018", y: 10},
  {x: "Jul 07 2018", y: 0},
  {x: "Jul 08 2018", y: 1},
  {x: "Jul 09 2018", y: 0},
  {x: "Jul 10 2018", y: 120},
];

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Вы можете упростить вещи, создав поиск по дате:

const {eachDay, format} = dateFns;

const dates = [
  {date: "Jul 06 2018", count: 10},
  {date: "Jul 08 2018", count: 1},
  {date: "Jul 10 2018", count: 120}
];

const counts = dates.reduce((memo, {date, count}) => {
  memo[date] = count;
  return memo;
}, {});

const result = eachDay(
  dates[0].date,
  dates.slice(-1)[0].date
)
  .map(d => {
    const x = format(d, "MMM DD YYYY");
    return {x, y: counts[x] || 0};
  })

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.js"></script>
0 голосов
/ 19 декабря 2018

Согласно документации для eachDay функция возвращает строковые значения, а не объекты со свойством dateCollected.

Вы можете получить желаемый результат следующим образом:

const {eachDay, format} = dateFns; // Just needed for this snippet to run

const dates = [
  {date: "Jul 06 2018", count: 10},
  {date: "Jul 08 2018", count: 1},
  {date: "Jul 10 2018", count: 120},
];

const result = eachDay(
  dates[0].date,
  dates.slice(-1)[0].date,
).map(x => format(x, "MMM DD YYYY"))
.map(x => ({ x, y: (dates.find(d => d.date === x) || { count: 0 }).count }));

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...