Tengo un conjunto de datos JSON que se ve así:
{ name: "Evelyn", assignment: "SCRUM", difficulty: 3, fun: 4 }Etc.
Estoy tratando de calcular el promedio de los valores de dificultad y diversión para cada tarea. Debido a que tengo 10 conjuntos/individuos con 56 tareas, mi idea es primero filtrar las tareas que deberían producir 56 conjuntos de tareas con 10 valores para cada diversión y dificultad y luego calcular el promedio para cada una.
Tengo dificultades para poner en práctica este plan porque no sé cómo hacer este nuevo conjunto/matriz de datos JSON decentemente. Estoy pensando en mapear, reducir, etc., pero simplemente me cuesta ponerlo en acción. ¿Hay una manera simple de hacer esto?
Puede agrupar los datos por asignación, usando Array.reduce() .
Una vez que hemos agrupado los datos, podemos obtener el promedio tanto de difficulty como de fun .
let data = [{ name: "Evelyn", assignment: "SCRUM", difficulty: 3, fun: 4 }, { name: "Bill", assignment: "SCRUM", difficulty: 1, fun: 3 }, { name: "Carol", assignment: "SCRUM", difficulty: 2, fun: 5 }, { name: "Evelyn", assignment: "PLANNING", difficulty: 5, fun: 3 }, { name: "Bill", assignment: "PLANNING", difficulty: 6, fun: 1 }, { name: "Carol", assignment: "PLANNING", difficulty: 1, fun: 2 } ] const groupedData = Object.values(data.reduce((acc, { name, assignment, difficulty, fun }) => { acc[assignment] = acc[assignment] || { assignment, difficulty: 0, fun: 0, participants: 0 }; acc[assignment].difficulty += difficulty; acc[assignment].fun += fun; acc[assignment].participants++; return acc; }, {})) const result = groupedData.map(({ assignment, participants, difficulty, fun }) => { return { assignment, participants, averageDifficulty: difficulty / participants, averageFun: fun / participants } }); console.log(result) .as-console-wrapper { max-height: 100% !important; }