🎉 Вы можете найти новые и обновленные сообщения на ellehallal.dev
Следуя моей предыдущей записи в блоге о JSON, Async / await и сокрытии ключа API, этот блог содержит примечания об использовании:
- объект даты JavaScript
- JSON.stringify ()
- Вложенные циклы forEach
Все перечисленное ниже было реализовано при выполнении второй основной функции JavaScript-менеджера погоды: показывать на странице пятидневный прогноз Лондона.
Цель
Данные за 5 дней лондонской погоды можно получить в формате JSON. Вот пример: https://samples.openweathermap.org/data/2.5/forecast?id=524901&appid=b6907d289e10d714a6e88b30761fae22
Значение list
key представляет собой массив из 40 объектов, содержащих информацию о погоде с трехчасовым шагом для текущего дня и следующих четырех дней. В каждом объекте есть ключ с именем dt_txt
, который содержит строку с датой и временем прогноза. Каждое значение уникально для 40 объектов.
"dt_txt": "2019-01-08 21:00:00"
Общая цель заключалась в том, чтобы абстрагировать данные, необходимые от выбранного объекта для отображения в index.html, такие как температура, описание температуры и значок).
Чтобы сделать это, первым шагом было создание массива, содержащего отметки времени (в том же формате, что и dt_txt
) для дат и времени, для которых я хотел извлечь данные.
Создание массива меток времени
Был создан новый экземпляр класса Date, который вернул сегодняшнюю дату. Затем это использовалось при создании объектов Date в течение следующих четырех дней, а затем использовалось для создания nextFourDays
array:
const oneDay = 1000 * 60 * 60 * 24; const today = new Date(); const todayPlus1 = new Date(today.getTime() + (oneDay)); const todayPlus2 = new Date(today.getTime() + (oneDay * 2)); const todayPlus3 = new Date(today.getTime() + (oneDay * 3)); const todayPlus4 = new Date(today.getTime() + (oneDay * 4)); const nextFourDays = [todayPlus1, todayPlus2, todayPlus3, todayPlus4]
Преобразование объекта Date в строку
Вышеупомянутый создал массив объектов Date, где каждая дата будет отформатирована следующим образом:
2019-01-12T16:54:56.426Z
JSON.stringify()
использовался для преобразования его в строку. .substring()
method использовался только для извлечения части даты:
let dateStrings = []; nextFourDays.forEach(function(date) { const dateToString = JSON.stringify(date) dateStrings.push(dateToString.substring(1, 11)) }); ---- dateStrings = ['2019-01-11', '2019-01-12', '2019-01-13', '2019-01-14']
Использование вложенных циклов forEach для объединения данных из двух массивов
Следующим шагом было создание массива, содержащего 16 строк. Каждая строка будет содержать извлекаемые приращения даты и времени. Был создан массив временных приращений:
const times = ['00:00:00', '06:00:00', '12:00:00', '18:00:00']
Затем цикл forEach, проходящий через массив times
, был вложен в другой цикл forEach. Это итерация по массиву dateStrings
. Каждый раз время и дата помещались в переменную экземпляра datesAndTimes
dateStrings.forEach((date) => { times.forEach((time) => { this.datesAndTimes.push(date + ' ' + time) }) })
Результат:
this.datesAndTimes = [ '2019-01-11 00:00:00', '2019-01-11 06:00:00', '2019-01-11 12:00:00', '2019-01-11 18:00:00', '2019-01-12 00:00:00', '2019-01-12 06:00:00', '2019-01-12 12:00:00', '2019-01-12 18:00:00', '2019-01-13 00:00:00', '2019-01-13 06:00:00', '2019-01-13 12:00:00', '2019-01-13 18:00:00', '2019-01-14 00:00:00', '2019-01-14 06:00:00', '2019-01-14 12:00:00', '2019-01-14 18:00:00' ]
Здорово! Теперь у меня был массив временных меток, отформатированных так же, как dt_txt.
Ресурсы: