Ваш текущий код близок, но вы попали в ваш if / while из-за ваших операторов. fromDate
должно быть меньше toDate
для того, чтобы прийти к любой промежуточной дате. Если fromDate
совпадает с toDate
, давайте просто вернем эту дату, чтобы наш результирующий массив не имел несовпадающих индексов.
new Vue({
el: '#app',
vuetify: new Vuetify(),
mounted () {
let arr = [
{id:1,fromDate:'2019-06-01',toDate:'2019-06-03'},
{id:2,fromDate:'2019-10-15',toDate:'2019-10-15'},
{id:3,fromDate:'2019-12-01',toDate:'2019-12-03'},
{id:4,fromDate:'2019-12-25',toDate:'2019-12-26'},
{id:5,fromDate:'2019-12-29',toDate:'2019-12-31'}
]
let tempDates = []
arr.forEach(element => {
let now = moment()
let fromDate = moment(element.fromDate)
let toDate = moment(element.toDate)
dateArray = []
if (fromDate < toDate) {
while (fromDate <= toDate) {
let ld = fromDate.format('YYYY-MM-DD')
dateArray.push(ld)
fromDate = moment(fromDate).add(1,'days');
}
}else {
dateArray.push(fromDate.format('YYYY-MM-DD'))
}
tempDates.push(dateArray)
})
console.log(tempDates);
},
})
В этом решении также был добавлен массив в forEach для того, чтобысобирать соответствующие даты из каждого элемента и хранить их отдельно, которые затем помещаются в массив tempDates. Вывод этого кода:
[["2019-06-01", "2019-06-02", "2019-06-03"], ["2019-10-15"], ["2019-12-01", "2019-12-02", "2019-12-03"], ["2019-12-25", "2019-12-26"], ["2019-12-29", "2019-12-30", "2019-12-31"]]
См. CodePen здесь: Решение
Конечно, вы можете отформатировать выходные данные, как вам угодно, у меня естьразделил информацию, так как схема для вывода не была детально указана.
Примечание: Вы также можете отказаться от forEach
и использовать reduce()
для достижения этой цели. В этом ответе я придерживался вашего оригинального стиля кода и подхода, который не ошибается, но есть альтернативные подходы.