Fictizia / Master-en-Programacion-FullStack-con-JavaScript-y-Node.js_ed3

FICTIZIA » Máster en Programación FullStack con JavaScript y Node.js — 3ª Edición
https://fictizia.com/formacion/master-javascript-nodejs
GNU Affero General Public License v3.0
68 stars 40 forks source link

¿Cómo generar un array de objetos dinámicamente? #13

Closed GuillermoBaldan closed 6 years ago

GuillermoBaldan commented 6 years ago

Se puede mirar una introducción a esta cuestión en un issue planteado anteriormente, creo que podría ayudar a enteder este issue aunque creo que este se puede entender por si mismo: ¿Cómo me monto un array de objetos? Queremos generar dinámicamente un array de objetos que contengan dos propiedades o atributos llamados:

El nombre del array de objetos es usercourses. Yo había pensado lo siguiente:

for (i=0;i<numberofcourses;i++){
    usercourses[i] = new Object();
    usercourses[i].coursename = listofcourses[Math.floor(Math.random()*listofcourses.length)];
    usercourses[i].progress = Math.floor(Math.random()*100);
        }

El problema La consola me arroja un error:

Uncaught TypeError: Cannot set property 'progress' of undefined

dándome el fallo en la siguiente línea de código: usercourses[i].progress = Math.floor(Math.random()*100);

UlisesGascon commented 6 years ago

@GuillermoBaldan lo más fácil para pensar en estructuras de datos es hacer uso de algún sistema como json-generator. Es más sencillo partir de este punto.

Un array de objetos...

var listaCursos = [{
        titulo: "Mecanica avanzada I",
        ref: "0001",
        tipo: "online"
    }, {
        titulo: "Mecanica de fuidos IV",
        ref: "0023",
        tipo: "presencial"
    }]

Mañana lo vemos si quieres en clase.... en principio en unas pocas clases ya estaremos viendo estructuras de datos ;-)

GuillermoBaldan commented 6 years ago

A ver... En principio me vale esto, que lo saqué de esta pregunta que publiqué en stackoverflow:

var usercourses = [] //Aquí cambié la expresión var usercourses = new Object();
var listofcourses = ['matemáticas', 'geografía', 'física', 'biología', 'filosofía'];
var numberofcourses = Math.floor(Math.random()*listofcourses.length);
for (i = 0; i < numberofcourses; i++) {
  usercourses[i] = new Object();
  usercourses[i].coursename = listofcourses[Math.floor(Math.random() * listofcourses.length)];
  usercourses[i].progress = Math.floor(Math.random() * 100);
}

for (var c in usercourses) {
  console.log(c, usercourses[c]);
}

Lo pegué en mi programa y me funciona

¿Qué opinas Ulises?

UlisesGascon commented 6 years ago

No pinta mal estructura, pero tendríamos que ver como escalaría cuando tengas muchos cursos y alumn@s ;-)

GuillermoBaldan commented 6 years ago

Bueno, eso creo que sería otro issue. Voy a cerrar este.