1

I would like to separate the nested objects whose condition is courses and take it to the beginning and then relate it to the object to which each course of the following array belongs, I have an idea of ​​how to do it with map, please friends I will thank you in advance

[
   {
      "id":41,
      "escuela_id":1,
      "ciclo":1,
      "descripcion":"Primer ciclo",
      "cursos":[
         {
            "id":1,
            "ciclo_id":41,
            "nombre":"Introducción a la danza",
            "tipo":"obligatorio",
         },
         {
            "id":3,
            "ciclo_id":41,
            "nombre":"Fundamento de la danza",
            "tipo":"obligatorio",
         },

      ],
      "escuela":{
         "id":1,
         "facultad_id":1,
         "nombre":"DANZA",
      }
   },
   {
      "id":46,
      "escuela_id":1,
      "ciclo":2,
      "descripcion":"Segundo ciclo",
      "cursos":[
        {
            "id":4,
            "ciclo_id":46,
            "nombre":"Danza moderna",
            "tipo":"obligatorio",
         }
      ],
      "escuela":{
         "id":1,
         "facultad_id":1,
         "nombre":"DANZA",
      }
   }
]

As a result I would like the following array some way to do with map or reduce

[
   {
      "id":1,
      "ciclo_id":41,
      "nombre":"Introducción a la danza",
      "tipo":"obligatorio",
      "ciclo":{
         "id":41,
         "escuela_id":1,
         "ciclo":1,
         "descripcion":"Primer ciclo"
      },
      "escuela":{
         "id":1,
         "facultad_id":1,
         "nombre":"DANZA"
      }
   },
   {
      "id":3,
      "ciclo_id":41,
      "nombre":"Fundamento de la danza",
      "tipo":"obligatorio",
      "ciclo":{
         "id":41,
         "escuela_id":1,
         "ciclo":1,
         "descripcion":"Primer ciclo"
      },
      "escuela":{
         "id":1,
         "facultad_id":1,
         "nombre":"DANZA"
      }
   },
   {
      "id":4,
      "ciclo_id":46,
      "nombre":"Danza moderna",
      "tipo":"obligatorio",
      "ciclo":{
         "id":46,
         "escuela_id":1,
         "ciclo":2,
         "descripcion":"Segundo ciclo"
      },
      "escuela":{
         "id":1,
         "facultad_id":1,
         "nombre":"DANZA"
      }
   }
]

1 Answer 1

1

We can solve your specific problem like this, with reduce and map. (To make it more generic would be possible, but also add a bit of work.)

const myInput = [
   {
      "id":41,
      "escuela_id":1,
      "ciclo":1,
      "descripcion":"Primer ciclo",
      "cursos":[
         {
            "id":1,
            "ciclo_id":41,
            "nombre":"Introducción a la danza",
            "tipo":"obligatorio",
         },
         {
            "id":3,
            "ciclo_id":41,
            "nombre":"Fundamento de la danza",
            "tipo":"obligatorio",
         },
      ],
      "escuela":{
         "id":1,
         "facultad_id":1,
         "nombre":"DANZA",
      }
   },
   {
      "id":46,
      "escuela_id":1,
      "ciclo":2,
      "descripcion":"Segundo ciclo",
      "cursos":[
        {
            "id":4,
            "ciclo_id":46,
            "nombre":"Danza moderna",
            "tipo":"obligatorio",
         }
      ],
      "escuela":{
         "id":1,
         "facultad_id":1,
         "nombre":"DANZA",
      }
   }
]

const myOutput = myInput.reduce((aggArr, item) => {
  
  const cursos = item.cursos.map(curso => {
    const tempItem = {...item};
    const tempEscuela = {...tempItem.escuela};
    delete tempItem.cursos;
    delete tempItem.escuela;
    
    return {...curso, 'ciclo': tempItem, 'escuela': tempEscuela};
  })
   
  return [...aggArr, ...cursos]
}, [])

console.log(myOutput)

OUTPUT:

[
  {
    "id": 1,
    "ciclo_id": 41,
    "nombre": "Introducción a la danza",
    "tipo": "obligatorio",
    "ciclo": {
      "id": 41,
      "escuela_id": 1,
      "ciclo": 1,
      "descripcion": "Primer ciclo"
    },
    "escuela": {
      "id": 1,
      "facultad_id": 1,
      "nombre": "DANZA"
    }
  },
  {
    "id": 3,
    "ciclo_id": 41,
    "nombre": "Fundamento de la danza",
    "tipo": "obligatorio",
    "ciclo": {
      "id": 41,
      "escuela_id": 1,
      "ciclo": 1,
      "descripcion": "Primer ciclo"
    },
    "escuela": {
      "id": 1,
      "facultad_id": 1,
      "nombre": "DANZA"
    }
  },
  {
    "id": 4,
    "ciclo_id": 46,
    "nombre": "Danza moderna",
    "tipo": "obligatorio",
    "ciclo": {
      "id": 46,
      "escuela_id": 1,
      "ciclo": 2,
      "descripcion": "Segundo ciclo"
    },
    "escuela": {
      "id": 1,
      "facultad_id": 1,
      "nombre": "DANZA"
    }
  }
]
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.