Tengo un JSON anidado, esto está estructurado de la siguiente manera: 
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
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.