Деструктуризация поля, где первый символ число
Подскажите, делаю запрос и мне прилетает json, я посредством деструктуризации вытаскиваю с него поля нужные и закидываю в объект
const {feels_like, temp} = responseDataCurrent.main
но там есть поле responseDataCurrent.rain['1h'], как записать 1h через деструктуризацию?
base: "stations"
clouds: {all: 41}
cod: 200
coord: {lon: 30.3694, lat: 60.0506}
main: {temp: 17.66, feels_like: 16.76, temp_min: 16.94, temp_max: 17.66, pressure: 1007, …}
weather: [{…}]
wind: {speed: 4.22, deg: 184, gust: 7.53}
rain: {1h: 0.63} //эта строчка не всегда присутствует в запросах
я эту строчку передаю в объект,
const currentObjData = {
precipMm: responseDataCurrent.rain['1h'],
}
но из за того что она отсутствует выдает ошибку Cannnot read properties of undefined, я хотел решить это через значение по умолчанию через деструктуризацию
Ответы (1 шт):
При деструктуризации, вам не обязательно создавать переменные с названиями ключей, вы можете изменить их название.
т.к. имена переменных не могут начинаться с числа, нам как раз придется это сделать
const x = {
'1h': 'hour'
}
const { '1h': h1 } = x;
console.log(h1);
UPD
Если значение может не приходить, то можно воспользоваться следующими методами
Если ключ приходит, но значения нет, то можно указать значение по умолчанию для переменной
const resp1 = {
rain: { h2: 0.54 }
}
const { '1h': h1 = 1} = resp1.rain;
console.log(h1);
Если ключ может не приходить, или ключ равен null, то надо подменить объект, что бы избежать ошибки Cannnot read properties of undefined, для этого воспользуемся логическим оператором или ||
const resp1 = {
}
const resp2 = {
rain: null
}
const { '1h': h1 = 1} = resp1.rain || {};
const { '1h': h2 = 2} = resp2.rain || {};
console.log(h1, h2);
Если resp*.rain логически будет иметь false, то в деструктуризацию будет передан пустой объект. Ключа 1h там нет, поэтому в переменную h1 попадет значение по умолчанию 1.