Деструктуризация поля, где первый символ число

Рейтинг: 0Ответов: 1Опубликовано: 24.04.2023

Подскажите, делаю запрос и мне прилетает 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, я хотел решить это через значение по умолчанию через деструктуризацию

Ответы

▲ 2

При деструктуризации, вам не обязательно создавать переменные с названиями ключей, вы можете изменить их название.

т.к. имена переменных не могут начинаться с числа, нам как раз придется это сделать

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.