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

137
Vistas
No se pueden establecer propiedades de indefinido por iteración del JSON anidado

Tengo un JSON anidado, esto está estructurado de la siguiente manera: ingrese la descripción de la imagen aquí

Como puedes ver el JSON se llama bwaResult y en este objeto hay tres grandes grupos. Estos grupos se denominan actBwa, fcBwa y planBwa. Estos grupos contienen años y resultados anuales (sumas) que también tienen años. Me gustaría asignar los valores a los años individuales. Eso significa que en 2020 tendría actBwa, fcBwa, planBwa y los valores de resultados anuales y lo mismo para los demás años.

Mi código:

 const plMonthResults = {}; const plMonth = resp.success ? resp.bwaResult : null; // JSON-DATA delete resp.success; if (plMonth && plMonth !== null && Object.keys(plMonth)) { let count = 0; for (const bwaType in plMonth) { const plMonthData = plMonth[bwaType]; // Here I get actBwa, fcBwa, planBwa if (count === 0) { for (const yearKey of Object.keys(plMonthData)) { plMonthResults[yearKey] = {}; // Sort by years } } for (const yearKeyInPlMonth in plMonthData) { plMonthResults[yearKeyInPlMonth][bwaType] = plMonthData[yearKeyInPlMonth]; // Here then arises the error } count += 1; } }

Cuando ejecuto el código, aparece el siguiente error:

 ERROR TypeError: Cannot set properties of undefined (setting 'fcBwa')

Supongo que dado que actBwa solo tiene 2020 y los otros grupos tienen más años, hay un problema para encontrar fcBwa e iterar más o estoy viendo esto mal. ¿Puedes decirme cómo resolver este problema?

ACTUALIZAR mi trabajo en stackblitz: https://stackblitz.com/edit/read-local-json-file-service-udqvck?file=src%2Fapp%2Fapp.component.ts

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

0

Parece que está usando count para copiar las claves solo una vez, pero eso significa que solo tendrá las claves del primer objeto (en este caso, actBwa ). En su lugar, puede revisar la clave de cada objeto, pero asegúrese de no anular los existentes. Así que elimine el count y modifique el aspecto así

 for (const yearKey of Object.keys(plMonthData)) { plMonthResults[yearKey] = plMonthResults[yearKey] ?? {}; }

Incluso puede eliminar este ciclo e incluir el cheque en el principal:

 for (const yearKeyInPlMonth in plMonthData) { plMonthResults[yearKeyInPlMonth] = plMonthResults[yearKeyInPlMonth] ?? {}; plMonthResults[yearKeyInPlMonth][bwaType] = plMonthData[yearKeyInPlMonth]; }

Avísame si eso te da el resultado que buscas.

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