1
resposta

Acessar um Array dentro de um Objeto

Olá tudo bem? estou com uma duvida referente manipulação de objetos. segue exemplo:

 const objetoInicial = {
  'jose': {
    boletos: [
      {
        id: 351331,
        valor: 33.1,
        status: "pago",
      },
      {
        id: 2132152,
        valor: 10.1,
        status: "pendente",
      },
    ],
  },

  'maria': {
    boletos: [
      {
        id: 12,
        valor: 130.1,
        status: "pendente",
      },
      {
        id: 153,
        valor: 1129.1,
        status: "pendente",
      },
    ],
  },
  }

Eu consigo acessar a informação "pendente" com o console.log(objetoInicial.jose.boletos), mas como seria utilizar um método para facilitar caso eu queira retornar apenas os objetos com o status pendente? como eu fiz:

Object.keys(objetoInicial).map(objetoIndex => {
  const arrayBoletosPendentes = []
  Object.keys(objetoInicial[objetoIndex]).map(value => {
    const arrayBoletos = objetoInicial[objetoIndex][value]
    for (const boleto of arrayBoletos) {
      console.log(arrayBoletos)
      if (boleto.status === "pendente") {
        delete boleto.status
        arrayBoletosPendentes.push(boleto)
        novoObjeto = { ...novoObjeto, [objetoIndex]: arrayBoletosPendentes }
      }
    }
  })
})

Tem uma forma mais pratica que usa menos loops? agradeço desde já

1 resposta

Olá Ariel, tudo bem com você?

Peço desculpas pela demora no retorno.

Podemos simplificar o código utilizando os métodos filter() e map() em conjunto com o operador spread (...).

O método filter() será utilizado para filtrar apenas os boletos com o status pendente. Em seguida, o método map() é utilizado para criar um novo objeto apenas com os boletos pendentes de cada objeto inicial. Por fim, o operador spread (...) e o método object.assign() são utilizados para unir todos os objetos pendentes em um único objeto. Essa implementação é apresentada no código abaixo.

const objetosPendentes = Object.keys(objetoInicial).map(objetoIndex => ({
    [objetoIndex]: objetoInicial[objetoIndex].boletos.filter(boleto => boleto.status === 'pendente')
}));

const novoObjeto = Object.assign({}, ...objetosPendentes);

console.log(novoObjeto);

Código completo

const objetoInicial = {
    'jose': {
        boletos: [
            {
                id: 351331,
                valor: 33.1,
                status: "pago",
            },
            {
                id: 2132152,
                valor: 10.1,
                status: "pendente",
            },
        ],
    },

    'maria': {
        boletos: [
            {
                id: 12,
                valor: 130.1,
                status: "pendente",
            },
            {
                id: 153,
                valor: 1129.1,
                status: "pendente",
            },
        ],
    },
}

const objetosPendentes = Object.keys(objetoInicial).map(objetoIndex => ({
    [objetoIndex]: objetoInicial[objetoIndex].boletos.filter(boleto => boleto.status === 'pendente')
}));

const novoObjeto = Object.assign({}, ...objetosPendentes);

console.log(novoObjeto);

Resultado

{
  jose: [ { id: 2132152, valor: 10.1, status: 'pendente' } ],
  maria: [
    { id: 12, valor: 130.1, status: 'pendente' },
    { id: 153, valor: 1129.1, status: 'pendente' }
  ]
}

Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!