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

111
Vistas
¿Hay alguna forma de transformar un objeto JavaScript en otro objeto con un formato más limpio?

Cuando accedo a una API de registro público, recibo más información de la que necesito y, a veces, los datos se devuelven con variaciones menores. Me gustaría eliminar algunos campos innecesarios, mover los campos anidados al nivel superior y cambiarles el nombre. El objetivo es estandarizar el formato en varias API diferentes y mantener el requisito de memoria al mínimo. Ejemplo a continuación:

Objeto crudo:

 [ { startDate: "2022/08/27", expiryDate: "2025/08/27", party: { type: "Business", name: "Irregular Expressions Inc." }, location: { type: "Office", address: { locality: "Boston", postcode: "PE21 8QR" } } }, { startDate: "2023/12/22", expiryDate: "2024/06/22", party: { type: "Charity", name: "Save the Badgers" }, site: { type: "Office", address: { locality: "Badgerton", postcode: "BA6 6ER" } } }, ]

Quiero transformar esto en una matriz más pequeña y limpia:

 [ { startDate: "2022/08/27", expiryDate: "2025/08/27", partyName: "Irregular Expressions Inc.", location: "Boston" }, { startDate: "2023/12/22", expiryDate: "2024/06/22", partyName: "Save the Badgers", location: "Badgerton" }, ]

He intentado lo siguiente, pero recibo un error.

 module.exports = { testTransform: (inputArray) => { const outputArray = [] inputArray.forEach(element => { outputArray.push({ startDate: element.startDate, expiryDate: element.expiryDate, partyName: element.party.name, location: element.location.address.locality }) }) return JSON.stringify(outputArray, null, ' ') } }
 TypeError: Cannot read properties of undefined (reading 'address')

¿Voy en la dirección correcta o hay una forma más sencilla de hacerlo? He buscado este tipo de transformación pero sin suerte. ¿Qué me estoy perdiendo?

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

0

Puede tomar la location o el site con OR lógico || y luego las propiedades con operador de encadenamiento opcional ?. .

 const data = [{ startDate: "2022/08/27", expiryDate: "2025/08/27", party: { type: "Business", name: "Irregular Expressions Inc." }, location: { type: "Office", address: { locality: "Boston", postcode: "PE21 8QR" } } }, { startDate: "2023/12/22", expiryDate: "2024/06/22", party: { type: "Charity", name: "Save the Badgers" }, site: { type: "Office", address: { locality: "Badgerton", postcode: "BA6 6ER" } } }], result = data.map(o => ({ startDate: o.startDate, expiryDate: o.expiryDate, partyName: o.party.name, location: (o.location || o.site)?.address?.locality })); console.log(result);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Está intentando leer la propiedad de locality de undefined . Puede usar el operador de encadenamiento opcional para evitar el lanzamiento de la excepción. Por lo tanto, debe usar algo como element?.location?.address?.locality en lugar de element.location.address.locality .

about 4 years ago · Juan Pablo Isaza Denunciar

0

Dado que parece que no sabe cuál será la clave externa para el objeto con la propiedad de address , si el objeto siempre tendrá 4 propiedades, al desestructurar, puede usar la sintaxis de descanso para recopilar la propiedad final en un solo objeto, y luego tome los valores de ese objeto para llegar a la dirección.

 const input=[{startDate:"2022/08/27",expiryDate:"2025/08/27",party:{type:"Business",name:"Irregular Expressions Inc."},location:{type:"Office",address:{locality:"Boston",postcode:"PE21 8QR"}}},{startDate:"2023/12/22",expiryDate:"2024/06/22",party:{type:"Charity",name:"Save the Badgers"},site:{type:"Office",address:{locality:"Badgerton",postcode:"BA6 6ER"}}}]; const output = input.map(({ startDate, expiryDate, party, ...rest }) => ({ startDate, expiryDate, partyName: party.name, location: Object.values(rest)[0].address.locality, })); console.log(output);

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