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

97
Visualizações
Convierta algunas claves de objeto en cadenas y luego compare los nuevos valores con los antiguos

Estoy tratando de trabajar con datos que se asemejan a este tipo de objeto:

 const sampleData = { coyotes: '', armadillos: false, wombats: [''], geckos: 0, dogs: { beagle: '', bulldog: '' }, wolves: [ { type: '', color: '', range: '', status: { endangered: true, protected: false } } ], cats: {} }

Como puede ver, tiene una combinación de diferentes tipos de JavaScript: cadenas, booleanos, números, etc.

Cuando algo en el formulario cambia, necesito comparar el objeto antiguo con el objeto modificado y verificar la igualdad, entre otras cosas. Para determinar si algo ha cambiado, uso esta función recursiva:

 export const getChangedValues = (initialValues, values) => { return Object .entries(values) .reduce((acc, [key, value]) => { const hasChanged = initialValues[key] !== value if (hasChanged) { acc[key] = value } return acc }, {}) }

Sin embargo, cuando comparo objetos nuevos con viejos usando lodash isEqual, obtengo un falso para los valores numéricos porque nuestros campos guardan números como cadenas (no tengo control sobre eso).

Entonces, uso esto para convertir SOLO los números en el objeto a cadenas, porque necesito dejar todo lo demás solo (especialmente los valores booleanos):

 export const convertValuesToStrings = (obj) => { return _.cloneDeepWith(obj, value => { return (_.isNumber(value)) ? _.toString(value) : undefined }) }

Esto funciona perfectamente para convertir números en cadenas, pero obtengo un falso positivo para los objetos anidados. Después de ejecutar el convertidor de cadenas y luego verificar si ha habido un cambio, también devuelve objetos, incluso si sus datos subyacentes no han cambiado.

Todavía estoy aprendiendo las áreas más complejas de JavaScript, como la recursividad. ¿Alguien puede ver lo que me estoy perdiendo aquí?

La conclusión es que necesito comparar recursivamente dos objetos después de convertir cualquier valor numérico (y SOLO valores numéricos) en cadenas. :)

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

0

Para mantener esto simple, ¿ha intentado comparar los objetos usando JSON.stringify() ?

 if(JSON.stringify(oldObject) === JSON.stringify(newObject)) { console.log('objects are basically equal' ) }

Este enfoque es bastante simple para comparar completamente un objeto profundo. Esto no se puede modificar demasiado, pero resuelve el problema utilizando una función incorporada probada y le permite concentrarse en escribir la aplicación real.

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