Ao trabalhar com JavaScript, entender a diferença entre cópia superficial e cópia profunda é essencial para a manipulação eficaz de objetos e matrizes. Vamos nos aprofundar no que esses termos significam e como implementar cada tipo de cópia em seu código.
Cópia superficial
Uma cópia superficial cria um novo objeto ou array que contém os mesmos valores do original. No entanto, se o original contiver objetos ou matrizes aninhados, a cópia superficial copiará apenas as referências a essas estruturas aninhadas, e não as próprias estruturas. Isso significa que alterações nos objetos aninhados ou matrizes na estrutura copiada também afetarão o original.
Exemplos de métodos de cópia superficial:
const original = { a: 1, b: { c: 2 } }; const shallowCopy = { ...original };
Aqui, rasoCopy é um novo objeto, mas rasoCopy.b ainda faz referência ao mesmo objeto que original.b.
2.Object.assign()
const shallowCopy = Object.assign({}, original);
const originalArray = [1, 2, 3]; const shallowCopyArray = originalArray.slice();
Cópia profunda
Uma cópia profunda cria um novo objeto ou matriz que é um clone completo e independente do original, incluindo todos os objetos e matrizes aninhados. As alterações na cópia profunda não afetam o original e vice-versa.
Exemplos de métodos de cópia profunda:
const original = { a: 1, b: { c: 2 } }; const deepCopy = JSON.parse(JSON.stringify(original));
Este método serializa o objeto em uma string JSON e depois o analisa de volta em um novo objeto. No entanto, ele não lida com funções, referências indefinidas ou circulares.
2.Função recursiva
function deepCopy(obj) { if (obj === null || typeof obj !== 'object') return obj; const copy = Array.isArray(obj) ? [] : {}; for (let key in obj) { if (obj.hasOwnProperty(key)) { copy[key] = deepCopy(obj[key]); } } return copy; }
const deepCopy = structuredClone(original);
Quando usar cada
Cópia superficial: Adequado para objetos simples ou matrizes sem estruturas aninhadas. É mais rápido e usa menos memória. Use-o quando precisar de uma cópia rápida onde as alterações nos objetos aninhados devem refletir tanto no original quanto na cópia.
Deep Copy: Necessário para objetos complexos ou matrizes com estruturas aninhadas. Garante que as alterações na cópia não afetem o original. Use-o quando precisar de clones completamente independentes.
Compreender essas diferenças ajuda a evitar bugs que surgem de referências compartilhadas não intencionais e garante a integridade dos dados em seus aplicativos
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3