Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

176
Vistas
¿Cuál es la mejor manera de transformar los nombres de los objetos al formato deseado?

¿Cuál es la mejor manera de asignar todas las propiedades del objeto a un nuevo formato de objeto con diferentes nombres de propiedad? Ejemplo:

este es el formato deseado

 const person = { firstName: 'john', lastName: 'doe', houses: [{ housName: 'Kruger' }] }

y tengo estos dos objetos

 const person1 = { prenom: 'john', //this should be mapped to the firstName nom: 'doe', //this should be mapped to the lastName houses: [{ house_name: 'Kruger' }] }
 const person2 = { name: 'john', // this should be mapped to the firstName familyName: 'doe', // this should be assigned to the lastName Houses: [{ House_Name: 'Kruger' }] };

El objetivo es hacer que person1 y person2 con todas sus propiedades y subpropiedades parezcan person.

YO HE TRATADO

 export class Person { @Expose({ name: 'prenom' }) firstName: string; @Expose({ name: 'nom' }) lastName: string; } } //this should give a formatted version from person1 ==> person const formatted = plainToClass(person1,Person)

Sin embargo, esto me obligaría a crear múltiples iteraciones de la clase Person, lo cual no es conveniente si queremos usar esta clase para escribir.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Primero, debe obtener todas las claves y valores de object mediante Object.entries(obj) , luego, en cada clave, debemos convertirla de pascal case a camel case , primero debemos cambiar la cadena a lower case luego con replace /_([az])/gi que capturan la primera letra después del guión bajo _ y la convierten en Upper case .

 str.toLowerCase().replace(/_([az])/gi, function (g) { return g[1].toUpperCase(); });

Luego, reduzca la matriz y conviértala de nuevo en un objeto.

 const mapToCamelCase = (obj) => { return Object.entries(obj).reduce((acc, [key,value]) => { var keyCamelCased = toCamelCase(key) acc[keyCamelCased] = value return acc }, {}) } 

 const person1 = { first_name: 'john', last_name: 'doe', houses: [{ house_name: 'Kruger' }] } const person2 = { First_Name: 'john', Last_Name: 'doe', Houses: [{ House_Name: 'Kruger' }] }; const toCamelCase = (str) => { return str.toLowerCase().replace(/_([az])/gi, function (g) { return g[1].toUpperCase(); }); } const mapToCamelCase = (obj) => { return Object.entries(obj).reduce((acc, [key,value]) => { var keyCamelCased = toCamelCase(key) acc[keyCamelCased] = value return acc }, {}) } console.log(mapToCamelCase(person1)) console.log(mapToCamelCase(person2))

about 4 years ago · Juan Pablo Isaza Denunciar

0

Una función recursiva simple puede hacer la conversión de nombre que desee. Esto funcionará para entradas con cualquier profundidad de entradas.

Uso de Object.entries() y Object.fromEntries()

 const person1 = { first_name: "john", last_name: "doe", houses: [{ house_name: "Kruger" }], }; const person2 = { First_Name: "john", Last_Name: "doe", Houses: [{ House_Name: "Kruger" }], }; const person3 = { first_name: "john", last_name: "doe", houses: [ { house_name: "Kruger", phone_numbers: [{ ext_code: "+54", phone_number: 232242323 }], }, ], }; const formatName = (str) => { return str .split("_") .map( (w, index) => (index > 0 ? w[0].toUpperCase() : w[0].toLowerCase()) + w.substring(1) ) .join(""); }; const formatNames = (input) => { if (Array.isArray(input)) { return input.map((item) => formatNames(item)); } else if (typeof input === "object") { return Object.fromEntries( Object.entries(input).map(([key, value]) => [ formatName(key), formatNames(value), ]) ); } return input; }; console.log(formatNames(person1)); console.log(formatNames(person2)); console.log(formatNames(person3));

Nota: si convirtió la función formatName en un argumento para formatNames , formatNames es mucho más flexible, ya que se puede usar para formar objetos con formato de nombre diferente.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Mi solución será crear un archivo de clase como este

en persona.js

 class Person { constructor(personObj) { this.firstName = personObj.first_name, this.lastName = personObj.Last_Name, this.houses = personObj.Houses; } } const person1 = { first_name: 'john', last_name: 'doe', houses: [{ house_name: 'Kruger' }] } const formatted = new Person(person1)
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda