Reduzindo objetos para acesso de um nível [Javascript,Object]
Tags: javascript, node, performance, objects
Published: 2022-09-18 00:47:53

Fala povo bonito 😀
Hoje venho aqui apresentar para vocês um package que eu criei bem simples para reduzir ou transformar objetos complexos em objetos mais simples.
Bora conferir isso ? 😀

## O problema

Constantemente em javascript nós temos que fazer o parse de arquivos json para objetos, ou ainda, recebemos dados de uma determinada fonte ( um body de uma requisição http por exemplo) e precisamos fazer o parse daquelas informações. O problema é que as vezes nós precisamos processar todo o objeto, mapeando-o para uma classe para então definir um modelo para aquela informação e na maioria das vezes esse é o caminho correto, porém existem situações em que fazer esse mapeamento, ou seja, definir um modelo para essa estrutura não é sequer possível devido a dinamicidade dos possíveis dados de entrada.
Então, se não consigo definir um modelo para esses dados, como saber se determinada propriedade existe nos dados recebidos ? Aí que vem o nosso package do dia, o **object-reducer-js**;

## object-reducer-js

O package é bem simples, ele serve para reduzir um objeto para um objeto de nível único.

Normalmente um objeto em javascript tem vários níveis de acesso, por exemplo:

```
const object = {
  propriedade1: 1,
  innerObject:{
    propriedade2: 2
  }
}
```
Ou seja, se eu quiser ler o valor do campo **propriedade2** precisamos fazer  ``` object.innerObject.propriedade2 ``` o que neste caso é relativamente simples, porém imagine que essa estrutura varie conforme diferentes fontes ou pior, varie na mesma fonte.
Neste caso podemos aplicar o package **obcject-reducer-js**, ele vai reduzir, ou seja simplificar, o objeto alvo, trazendo todas as propriedades não nulas para o primeiro nível de acesso.
Por exemplo esse objeto que analisamos, após passá-lo pelo package ele ficaria assim:
```
const objectReduced = {
  propriedade1: 1,
  propriedade2: 2
}

```
Ou seja, após simplificar o objeto, para saber se determinada propriedade existe basta você fazer ```objectReduced .propriedade```, eliminando a necessidade de fazer o parse 😀

## Exemplo prático

Como todo bom artigo de programação, na minha humilde opinião, precisa de um exemplo prático aqui vai um pequeno trecho de código que mostra o package em ação!

````

const objectReducer = require('object-reducer-js');

const complexObject = {
 originIp:'192.168.0.1',
  hostData:{
    subRede:'192.168.0.0',
    hostName: 'www.localhost.com.br',
    identityId:'74512dsw',
    hostDetails:{
      geoInformation:{
        long:'45.145',
        lat: '78.412'
      },
      isAuth: true
    }
  }
}

// Fazendo um acesso regular ao objeto 

console.log('Está autenticado ?',  complexObject.hostData.hostDetails.isAuth);

const reducedObject =  objectReducer.reduceObjectSync(complexObject);

// objeto reduzido vai ser dessa forma

/* {
  originIp:'192.168.0.1',
  subRede:'192.168.0.0',
  hostName: 'www.localhost.com.br',
  identityId:'74512dsw',
  long:'45.145',
  lat: '78.412',
  isAuth: true
 }
*/

// Fazendo acesso após reduzir o objeto

console.log('Está autenticado ?',  reducedObject.isAuth);
```
Dessa forma conseguimos reduzir  objeto para acesso a um level apenas, acessando todas as propriedades com muito mais comodidade.

# Download do package

Para baixar o package basta instalá-lo utilizando o npm:

`npm i object-reducer-js`

Dá uma olhada na página do package para checar todas as possibilidades de uso e mais detalhes 😀:
[https://www.npmjs.com/package/object-reducer-js](https://www.npmjs.com/package/object-reducer-js)


Bom é isso, essa foi a dica de hoje, espero que lhes seja útil em algum momento. Fiquem com Deus e até a próxima 😀