@teertsneerg

Как заполнить пропуски в массиве?

Есть массив состоящий из дат, в массиве есть пропуски. (т.е. arr[0] = 23.05.2025, arr[1] = 26.05.2025), нужно заполнить массив пропущенными датами, т.е. чтобы стало

arr[0] = 23.05.2025, arr[1] = 24.05.2025 , arr[2]= 25.05.2025, arr[3] = 26.05.2025

Как лучше реализовать?

Для работы с датами использую momentJS.
  • Вопрос задан
  • 283 просмотра
Решения вопроса 1
coderisimo
@coderisimo Куратор тега JavaScript
momentJS необязателен )
var getDatesBetweenDates = (startDate, endDate) => {
  let dates = []

  const theDate = new Date(startDate)
  while (theDate < endDate) {
    dates = [...dates, new Date(theDate)]
    theDate.setDate(theDate.getDate() + 1)
  }
  return dates
}

это будет массив объектов, откуда можно получить даты в нужном формате, например вот так :
(getDatesBetweenDates(new Date(2020,11,1), new Date(2020,11,7))).map((i)=>i.toLocaleString('ru',
{  
day: '2-digit', 
year: '2-digit', 
month: '2-digit',}))


можно собрать все это в одну ф-цию, но так нагляднее ))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@BATPYIIIKOB
PHP, JS
Создай новый массив и в цикле прогони по всем значениям старого i и i+1 - две крайние даты. И заполни новый массив. в momentJS вроде есть range как допник
Ответ написан
Комментировать
GiPas
@GiPas
Молода, азартна, активна, разумна
1. Если в массиве НЕТ значений в переменных V1, V2, то V3=0
2. Если в массиве есть значения в переменных V1 или V2, то V3 рассчитывается по формуле:
(a)Значение из ближайшей заполненной ячейки слева +
(b)разность между ближайшей заполненной ячейкой и ближайшей заполненной ячейкой справа
(c)деленная на общее число пустых ячеек между V3 и ближайшей заполненной ячейкой слева +1
(d)и умноженная на число пустых ячеек между V3 и ближайшее заполненной переменной слева)
V3=a+b/c*d
То есть для ID=1,
V2=1+(5-1)/3*1=1+1.33*1=2,66
V3=1+(5-1)/3*2=1+1,33*2=3,66.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы