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 a necessidade surge de modificar um objeto existente, removendo certas propriedades, mas preservando outras. Essa tarefa parece simples à primeira vista, mas se torna mais complexa quando buscamos uma solução limpa, eficiente e que preserve a integridade do objeto original.
---
Imagine que você tenha um objeto com diversas propriedades e deseja manter apenas algumas delas, eliminando o resto. A abordagem mais comum, especialmente para quem busca uma solução rápida, é fazer uso de operações de desestruturação, que permitem extrair propriedades específicas de um objeto. 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.
Por exemplo, suponha que temos:
const meuObjeto = {
p1: 123,
p2: 321,
p3: { p3_1: 1231, p3_2: 342 },
p4: '23423',
p99: { p99_1: 'sadf', p99_2: 234 },
p100: 3434
}.
E queremos manter apenas p1, p2 e p100.
---
A solução mais elegante que muitos aprendem na prática é usar a desestruturação com uma função de retorno rápida:
const resultado = (({ p1, p2, p100 }) => ({ p1, p2, p100 }))(meuObjeto).
Isto cria um novo objeto contendo somente as propriedades desejadas, sem clonar tudo ou fazer operações manuais. Assim, evitamos código repetitivo e mantemos a clareza. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar.
Porém, há um ponto importante: essa abordagem não modifica o objeto original. Ela cria um novo objeto com as propriedades selecionadas. Se quisermos modificar o objeto original, removendo as demais propriedades sem criar uma nova variável, podemos usar delete, embora seja uma operação que deve ser feita com cautela. 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.
// Removendo todas as propriedades exceto as desejadas
Object.keys(meuObjeto).forEach(key => {
if (!['p1', 'p2', 'p100'].includes(key)) {
delete meuObjeto[key]. }
}). 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. 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.
Essa abordagem garante que o objeto original seja modificado, removendo todas as propriedades que não estejam na lista. É simples, porém, pode afetar referências externas ao objeto. 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. 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.
---
Vantagens:
delete ou desestruturação.Desvantagens:
delete pode impactar performance em objetos de grande escala, especialmente em ambientes com muitos objetos ou operações frequentes.delete torna difícil rastrear mudanças, além de potencialmente afetar objetos que são usados como prototypes.Falas comuns:
delete é a melhor alternativa.
1. Avalie se a modificação no objeto original é segura ou se um clone é preferível.
2. Para modificações diretas, use delete com uma lista de propriedades permitidas.
3. Para manter a imutabilidade, prefira a desestruturação para criar versões filtradas do objeto.
4. Se precisar manipular objetos complexos ou com propriedades aninhadas, considere usar bibliotecas como Lodash (pick, omit) ou escrever funções recursivas.
5. Sempre teste o impacto de delete em ambientes de alta performance, pois ele pode gerar um impacto significativo dependendo do uso.
---
Remover propriedades específicas de um objeto em JavaScript é uma tarefa que parece trivial, mas exige atenção ao contexto de uso, performance e impacto na manutenção do código. A escolha entre delete e desestruturação deve ser feita considerando esses fatores, garantindo que sua solução seja eficiente e sustentável no seu fluxo de trabalho. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. 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.
Sim, já passei por isso. Em situações assim, prefiro criar uma nova versão do objeto usando desestruturação, especialmente se for uma operação que rola frequentemente. Assim, evito impacto na performance.
Gosto de usar o
deletequando quero modificar o objeto original, mas acho que em objetos grandes isso pesa. Vocês já tiveram problemas de performance com isso?No meu time, a gente geralmente usa a abordagem de desestruturação pra manter a imutabilidade. Depois, só substituí o objeto antigo, assim fica mais controlado.
Exato, o uso do delete deve ser pensado com cuidado.