Я пытаюсь назначить объекту каждый день месяца, но получаю только последний день каждого месяца. Как мне сделать, чтобы получить полный месяц?
function loopRange (startDate, range) {
let fromDate = moment(startDate)
let toDate = moment(startDate).add(range, 'month')
let dates = {}
for (let m = moment(fromDate); m.diff(toDate, 'days') <= 0; m.add(1, 'days')) {
dates['month_' + m.format('MM')] = {
'date': m.format('YYYY-MM-DD')
}
}
return dates
}
Результат хочу:
dates = {month_11: ['2018-11-01', '2018-11-02', ...]}
Хочу каждый день в dates['month_' + m.format('MM')]объекте. Только получи последний сейчас
А если нет, то как вы ожидаете, что в объекте будет больше одной даты?
Что ты имеешь в виду?
Вы жалуетесь, что у вас только последнее свидание. Где вы ожидаете поместить более одной даты в одно свойство объекта?
Я зацикливаю на range в toDate. range в данном случае равен 2, что означает цикл на два месяца вперед.
Пожалуйста, просто покажите, как вы ожидаете увидеть окончательный результат. Я знаю, что должно быть два месяца, но где вы собираетесь помещать несколько дат в каждый месяц?
{['2018-11-01', '2018-11-02', ...]} недопустимый синтаксис. Все внутри {} должно быть в формате key: value.
Массив просто окружен [], а не {}.
Я обновил свой вопрос теперь результатом. Вот в чем проблема, я застрял, кажется, я перезаписываю ключ на каждый месяц, и это основная проблема здесь.
Ответ Дэвида показывает, как это сделать.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы получаете только последний день, потому что ваш цикл for продвигается в дневном интервале.
Однако, когда назначается dic dates, вы указываете месяц в качестве ключа - поэтому каждая итерация (в пределах одного месяца) заменяет предыдущий ключ новым днем -> так что вы получаете только последний день месяца ...
Если вы хотите, чтобы все даты во временном диапазоне, поскольку элементы массива делились на ключи месяца, вы можете использовать следующий код:
for (let m = moment(fromDate); m.diff(toDate, 'days') <= 0; m.add(1, 'days'))
{
let month_key = 'month_' + m.format('MM');
if (!dates.hasOwnProperty(month_key))
dates[month_key] = [];
dates[month_key].push(m.format('YYYY-MM-DD'));
}
Если он использует полный формат в качестве ключа, то ключ будет таким же, как и значение. Какой в этом смысл?
Спасибо, это имеет для меня смысл! Я хотел бы иметь месяц в качестве ключевого, а не полный формат даты.
@Barmar - согласен. Но похоже, что это было намерение ОП -> получить значение дат. Я отредактирую ответ, чтобы каждый месяц имел sub-json, содержащий весь день, но я не уверен, что это был исходный запрос.
Или, может быть, ему нужен массив всех дат месяца, например {month_11: ['2018-11-01', '2018-11-02', ...]}
Именно это я имел в виду в своем последнем комментарии - отредактирую ответ
@Barmar, это именно то, что я пытаюсь сделать здесь
@nahoj Задайте этот вопрос.
@nahoj Теперь мой пост отвечает на ваш вопрос?
Какого результата вы ожидаете? Должно ли свойство
dateсодержать массив дат?