Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Quando trabalhamos com objetos em JavaScript, muitas vezes o desafio não é apenas criar uma nova versão filtrada, mas modificar o objeto original de forma segura e eficiente.
---
Imagine que você tem um objeto complexo, cheio de propriedades, e precisa reduzir sua estrutura apenas às chaves essenciais, sem criar uma cópia. Essa necessidade surge em cenários de otimização de memória, ajustes de dados em tempo de execução ou controle de dados sensíveis.
Exemplo clássico: um objeto com várias propriedades, incluindo dados aninhados, e você quer manter apenas algumas delas. A questão é como fazer isso de forma elegante, evitando soluções pouco escaláveis ou que gerem impactos de performance. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
---
A abordagem mais óbvia — deletar propriedades uma a uma ou usar funções que clone e filtre — costuma ser ineficiente ou pouco clara. Usar delete diretamente, por exemplo, modifica o objeto original, o que pode causar problemas de consistência na aplicação. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Por outro lado, usar Object.assign() ou spread operator cria cópias superficiais, o que pode ser útil, mas não resolve o caso de modificação in-place. Assim, a busca é por uma solução que seja fácil de entender, performática e segura. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
---
O método mais limpo e elegante em JavaScript moderno é usar desestruturação para extrair as propriedades desejadas e então reatribuir o objeto. Isso garante que o objeto original seja modificado, sem criar cópia desnecessária. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
// Suponha um objeto inicial
const myObj = {
p1: 123,
p2: 321,
p3: { p3_1: 1231, p3_2: 342 },
p4: '23423',
p99: { p99_1: 'sadf', p99_2: 234 },
p100: 3434
}. // Lista de propriedades que queremos manter
const propsManter = ['p1', 'p2', 'p100']. // Para modificar in-place, podemos iterar sobre as chaves e deletar as não desejadas
propsManter.forEach(prop => {
if (!(prop in myObj)) return. }). // podemos usar uma abordagem que remove as demais A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
// Uma abordagem comum é iterar todas as chaves e deletar as que não estão na lista
Object.keys(myObj).forEach(key => {
if (!propsManter.includes(key)) {
delete myObj[key]. }
}). // Agora, myObj contém apenas as chaves desejadas
console.log(myObj). Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Essa estratégia é eficiente, direta e bastante clara. Evita criar objetos temporários e mantém a referência do objeto original. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
---
Apesar de simples, essa abordagem tem suas limitações. Se o objeto tiver referências internas ou propriedades que são objetos complexos, deletar pode afetar referências externas, causando efeitos colaterais inesperados. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Para cenários mais complexos, talvez seja necessário usar proxies ou outros mecanismos de controle de estado. Além disso, deletar propriedades pode impactar a performance em objetos muito grandes, mas na maioria dos casos, o impacto é mínimo. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
Outro ponto importante é garantir que a lista de propriedades a serem mantidas seja gerada de forma confiável, evitando remover propriedades essenciais por engano. A decisão fica mais saudável quando o time consegue medir o impacto depois. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
---
Se seu objetivo é modificar um objeto existente para conter somente algumas propriedades, a melhor estratégia é iterar suas chaves e deletar as que não interessam. Essa abordagem é direta, performática e fácil de entender. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Para quem busca uma solução mais funcional, desestruturação com criação de um novo objeto ainda é válida, mas em cenários onde a manipulação in-place é preferida, deletar as chaves é o caminho. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Clientes e APIs agradecem por um controle mais preciso sobre o formato dos dados enviados e recebidos. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. A decisão fica mais saudável quando o time consegue medir o impacto depois.
E na sua rotina, qual método você costuma usar para esse tipo de manipulação? Prefere garantir imutabilidade ou modificar objetos diretamente? Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
Acho que na prática, deletar direto funciona bem, mas tem que tomar cuidado com referências externas. Já passei por isso e foi um caos pra debugar.
Concordo, Daniel. Eu prefiro criar um novo objeto com as chaves necessárias, assim evito efeitos colaterais. Mas às vezes na hora do deploy, a modificação direta é mais rápida.
No meu time, a gente costuma usar a abordagem de deletar, porque é mais direta e consome menos memória. Mas sempre verifico se não tenho referências externas antes.