Search code examples
javascriptnode.jsobjectdestructuring

How to destructurate an object property that sometimes is received as null


I have this object below that I receive via API, but sometimes the SimplesNacional property comes as null. How do I destructure(??) it only when it's not null, since it has some nested properties that break my program in the destructuration?

This is the object:

const {
    Retorno: {
        ReceitaPJ: {
            NumeroInscricao: numeroInscricao,
            Matriz: matriz,
            DataAbertura: dataAbertura,
            NomeEmpresarial: nomeEmpresarial,
            NomeFantasia: nomeFantasia,
            NaturezaJuridica: naturezaJuridica,
            SituacaoCadastral: situacaoCadastral,
        },
        SimplesNacional: {
            SituacaoSimplesNacional: situacaoSimplesNacional,
            SituacaoSIMEI: situacaoSIMEI,
            SimplesNacionalPeriodosAnteriores: simplesNacionalPeriodosAnteriores,
            SIMEIPeriodosAnteriores,
            DataConsulta: dataConsulta,
        },
        CadastroPJ: {
            Telefones: telefones,
            Enderecos: enderecos,
            Emails: emails,
            Socios: socios,
        },
    },
} = response;

This is the usage:

result.data = {
    cadastroPJ: {
        numeroInscricao,
        matriz,
        dataAbertura,
        nomeEmpresarial,
        nomeFantasia,
        naturezaJuridica,
        situacaoCadastral,
    },
    simplesNacional: {
        nomeEmpresarial,
        situacaoSimplesNacional,
        situacaoSIMEI,
        simplesNacionalPeriodosAnteriores,
        SIMEIPeriodosAnteriores,
        dataConsulta,
    },
    telefones: telefones.map((x) => ({
        numero: x.TelefoneComDDD,
    })),
    enderecos: enderecos.map((x) => ({
        logradouro: x.Logradouro,
        numero: x.Numero,
        bairro: x.Bairro,
        cidade: x.Cidade,
        uf: x.UF,
        cep: x.CEP,
    })),
    emails: emails.map((x) => ({
        endereco: x.EnderecoEmail,
    })),
    socios: socios.map((x) => ({
        documento: x.Documento,
        nome: x.Nome,
        percentualParticipacao: x.PercentualParticipacao,
        dataEntrada: x.DataEntrada,
    })),
};

Visual Studio Code terminal says:

Cannot destructure property SituacaoSimplesNacional of undefined or null.

because the property SimplesNacional is null.


Solution

  • const {
      Retorno: {
        ReceitaPJ: {
          NumeroInscricao: numeroInscricao,
          Matriz: matriz,
          DataAbertura: dataAbertura,
          NomeEmpresarial: nomeEmpresarial,
          NomeFantasia: nomeFantasia,
          NaturezaJuridica: naturezaJuridica,
          SituacaoCadastral: situacaoCadastral,
        },
        SimplesNacional,
        CadastroPJ: {
          Telefones: telefones,
          Enderecos: enderecos,
          Emails: emails,
          Socios: socios,
        },
      },
    } = response
    
    if (SimplesNacional) {
      var {
        SituacaoSimplesNacional: situacaoSimplesNacional,
        SituacaoSIMEI: situacaoSIMEI,
        SimplesNacionalPeriodosAnteriores: simplesNacionalPeriodosAnteriores,
        SIMEIPeriodosAnteriores,
        DataConsulta: dataConsulta,
      } = SimplesNacional
    }
    

    Just make it in two steps

    EDIT: if you want use const...

    const {
       SituacaoSimplesNacional: situacaoSimplesNacional,
       SituacaoSIMEI: situacaoSIMEI,
       SimplesNacionalPeriodosAnteriores: simplesNacionalPeriodosAnteriores,
       SIMEIPeriodosAnteriores,
       DataConsulta: dataConsulta,
     } = (SimplesNacional || {})
    

    but anyway, deep in object will throw an error later...