Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

200
Visualizações
¿Cómo se actualizan los datos originales al cambiar el valor de un objeto?

tengo la siguiente funcion

 export const massageData = (data) => ({ title: data?.label, sections: data?.sections?.map((item) => { if (item.display === "HR") { const tableBody = [{ id: "new" }]; item["tableData"] = tableBody; } return item; }), });

Aquí, lo que está sucediendo es que estoy actualizando el item , aquí data se actualizan y esto si la condición se llama dos veces. también estoy actualizando ítem con nuevo valor, pero al regresar me da indefinido.

Cualquier ayuda será útil.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

El comportamiento mediante el cual los datos originales se actualizan después de mutar donde se copian los datos radica en la distinción entre Tipos de Value Types de Reference Types , que son las dos categorías amplias en las que se incluyen todos los tipos de datos en JavaScript. Para los tipos de valor, significa que un valor es simplemente un valor y no el valor recuperado al apuntar a una posición en la memoria. Sin embargo, los tipos de referencia son aquellos tipos de datos cuyo valor no se almacena directamente, sino que lo que se almacena es una referencia a un punto en la memoria, y el valor de esos tipos se recupera cada vez apuntando al punto en la memoria para obtener la información más actualizada. valor almacenado allí.

Eso nos lleva a cómo copiar valores de tipos de referencia de manera intencional, y esos son Copia de Value Copy de Reference Copy . Al hacer una copia de valor, significa que el valor almacenado en la memoria de los datos originales se copia en otro punto de la memoria, mientras que una copia de referencia significa que la copia de los datos originales se realiza simplemente apuntando una nueva variable al mismo lugar. en la memoria donde apuntan los datos originales en la memoria. La implicación de cualquiera de los enfoques es que, en el caso de la copia de valor, la modificación de los datos copiados de valor no mutará los datos originales; en el caso de la copia de referencia, sin embargo, la modificación de los datos copiados de referencia mutará los datos originales, ya que eso mutar los datos almacenados en la misma ubicación de memoria a la que apuntan tanto los datos originales como los datos copiados por referencia.

La parte más complicada es cuando tiene tipos de referencia almacenados dentro de tipos de referencia, como es el caso del parámetro de datos que su código muestra que tiene una propiedad de sección, cuyo valor es un Array (un tipo de referencia), que es una colección de objetos de elementos, cada uno de los cuales es un objeto (también un tipo de referencia). El truco aquí es que aunque se sabe que el método Array.prototype.map es una función pura que hace una copia de valor de la matriz sobre la que está operando; que es la section en su caso, sin embargo, solo hará una copia de valor de la matriz y se preocupa menos por hacer una copia de valor de los elementos dentro de la matriz, que es lo que causó que la mutación de esos elementos terminara mutando los datos originales que pasó como un argumento en la función eventualmente.

Por lo tanto, la forma de resolver eso es hacer una copia de valor profunda de sus argumentos antes de operarlos dentro de su función una vez que sean tipos de referencia, y hacer una copia de valor de sus elementos secundarios que también son tipos de referencia.

El siguiente enfoque es uno de los muchos enfoques que pueden lograrlo:

 const pureMassageData = (data) => { let dataCopy = { ...data }; // Make a value copy of other reference props as is done for sections and then items within section as below dataCopy.sections = dataCopy.sections.map(item => ({ ...item })); return { title: dataCopy?.label, sections: dataCopy?.sections?.map((item) => { if (item.display === "HR") { const tableBody = [{ id: "new" }]; item["tableData"] = tableBody; } return item; }), } }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda