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

188
Vistas
Matriz de objetos con datos de exámenes presentados, ¿cómo puedo obtener la calificación promedio de cada estudiante en una matriz?

Digamos que tengo una matriz de objetos que contienen información sobre todos los exámenes presentados durante un período de tiempo. Su estructura es así:

 [ { name: 'Freddy', grade: 10, date: '20/07/2022' }, { name: 'Jose', grade: 8, date:'20/07/2022' }, { name: 'Freddy, grade: 8', date: '25/07/2022' }, { name: 'Daniel', grade: 5, date: '21/07/2022' }, { name: 'Jose', grade: 5 }, date: '22/07/22', ]

Lo que necesito es ignorar el valor de la fecha y simplemente calcular la calificación promedio de cada estudiante y obtener una matriz simple como esta:

 [9, 6.5, 5]

Ahora digamos que quiero que la matriz siga un orden específico, entonces, ¿cómo puedo reorganizarla siguiendo este orden: Freddy -> José -> Daniel?

Parece un poco extraño, pero necesito que el resultado sea así para usarlo como un conjunto de datos para Chart.js más adelante.

about 4 years ago · Santiago Gelvez
2 Respuestas
Responde la pregunta

0

Para hacer esto:

  • Usé reduce para crear un diccionario que tenga la suma de calificaciones y el recuento de calificaciones de cada estudiante.

    • Utilicé un diccionario porque facilita la búsqueda mientras reduce itera a través de la matriz.
  • Luego usé Object.keys() para obtener una matriz de las claves del diccionario y map esa matriz en una matriz que tiene un objeto para la calificación promedio de cada estudiante.

    • Lo hice de esta manera porque asumí que esta salida podría ser útil. Habría sido más sencillo recorrer el diccionario y convertirlo en un diccionario de promedios.
  • Luego map la matriz de objetos solo a los promedios.

 const students = [ { name: 'Freddy', grade: 10, date: '20/07/2022' }, { name: 'Jose', grade: 8, date:'20/07/2022' }, { name: 'Freddy', grade: 8, date: '25/07/2022' }, { name: 'Daniel', grade: 5, date: '21/07/2022' }, { name: 'Jose', grade: 5 , date: '22/07/22'} ] const grouped = students.reduce( (output, student) => { const name = student.name if (output[name]) { output[name].gradeTotal += student.grade; output[name].count += 1; } else { output[name] = { gradeTotal: student.grade, count: 1 } } return output }, {}) console.log('Grouped by student: ', grouped) const studentAverages = Object.keys(grouped).map(name => ( { name, average: grouped[name].gradeTotal / grouped[name].count } ) ) console.log('Student averages: ', studentAverages) const justAverages = studentAverages.map(student => student.average) console.log('Just averages:', justAverages)

about 4 years ago · Santiago Gelvez Denunciar

0

Creo que eso es lo que quieres.

  1. Hice algunas variables para sum , counter para contar la ocurrencia de cada nombre, average y avgArr para almacenar los promedios
  2. Luego hizo bucles anidados. El ciclo externo para tomar cada nombre de objeto y almacenarlo en la variable de name . El bucle interno recorre la matriz, busca el nombre y calcula el average para cada persona. Luego agregue este average a la matriz avgArr .
  3. Agregué la propiedad checked a cada objeto para evitar tomar el mismo objeto más de una vez si es true , omita ese objeto, si el objeto no tiene esta propiedad, tome este objeto, agregue la propiedad checked y configúrela en true . Si no desea esta propiedad, puede eliminarla más tarde.

 let arr =[ { name: 'Freddy', grade: 10, date: '20/07/2022' }, { name: 'Jose', grade: 8, date:'20/07/2022' }, { name: 'Freddy', grade: 8, date: '25/07/2022' }, { name: 'Daniel', grade: 5, date: '21/07/2022' }, { name: 'Jose', grade: 5 , date: '22/07/22' }]; let sum = 0; let counter = 0; let avg; const avgArr = []; for (const i of arr){ let name = i.name; if (i.checked === true) { continue; } for (const j of arr){ if (name === j.name) { j.checked = true; sum += j.grade; counter +=1; } } avg = sum / counter; avgArr.push(avg); sum = counter = 0; } console.log(avgArr); // [9, 6.5, 5]

about 4 years ago · Santiago Gelvez 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