Executando verificação de segurança...
6

Lidando com objectos em JS - Parte 1

Os objectos em JavaScript tenhem vários métodos que permitem a você realizar várias operações com eles, neste post vamos destacar os primeiros 5.

  1. Object.assign(target,source1,source2,...): Copia o valor de todas as propriedades enumeradas de uma ou mais fontes para o objecto principal.
const target = {};
const source = { a : 1, b : 2};
Object.assign(target,source);
console.log(target); // { a : 1, b : 2}
  1. Object.keys(obj): Retorna um array de strings que representa todas as propriedades enumeráveis do objecto.
const obj = { a: 1, b: 2, c: 3 };
const keys = Object.keys(obj);
console.log(keys); // [ 'a', 'b', 'c' ]

  1. Object.values(obj): Retorna um array de valores correspondentes as propriedades enumeraveis de um objecto.
const obj = { a: 1, b: 2, c: 3 };
const values = Object.values(obj);
console.log(values); // [ 1, 2, 3 ]
  1. Object.entries(obj): Retorna um array de arrays, onde cada array contém um par de chave-valor que representa uma propriedade enumeravel do objecto.
const obj = { a: 1, b: 2, c: 3 };
const entries = Object.entries(obj);
console.log(entries); // [ [ 'a', 1 ], [ 'b', 2 ], [ 'c', 3 ] ]
  1. Object.getOwnPropertyNames(obj): Retorna um array com os nomes de todas as propriedades (enumeraveis ou não ) do objecto.
const obj = { a: 1, b: 2 };
const propertyNames = Object.getOwnPropertyNames(obj);
console.log(propertyNames); // [ 'a', 'b' ]

***Não esqueça de praticar ***

Carregando publicação patrocinada...
Conteúdo excluído
2

O spread também cria uma shallow copy:

In JavaScript, all standard built-in object-copy operations (spread syntax, Array.prototype.concat(), Array.prototype.slice(), Array.from(), Object.assign(), and Object.create()) create shallow copies rather than deep copies.

https://developer.mozilla.org/en-US/docs/Glossary/Shallow_copy

Para realmente fazer uma deep copy é possível utilizar a função structuredClone, nativa do JS, ou uma biblioteca externa como o lodash.

https://developer.mozilla.org/en-US/docs/Web/API/structuredClone
https://lodash.com/docs/4.17.15#cloneDeep

1

Também é possível fazer uma deep copy usando JSON.stringfye depois JSON.parse, não sei se é a forma mais correta, mais sempre que preciso faço dessa forma.

1

O problema é que JSON.stringify dá erro se o objeto tiver referências circulares. Embora seja possível contornar, usar structuredClone me parece mais direto do que gerar uma string e depois fazer parse nela. Aliás, tem vários benchmarks mostrando que usar JSON pra isso é mais ineficiente (embora para poucos objetos pequenos não deva fazer diferença).

Outra vantagem de structuredClone é que funciona com vários tipos que JSON não suporta, como Date e RegExp, entre outros (embora também seja possível contornar, exemplo).