JavaScript - Ordenar un array Bidimensional en JavaScript

 
Vista:
sin imagen de perfil
Val: 7
Ha aumentado su posición en 5 puestos en JavaScript (en relación al último mes)
Gráfica de JavaScript

Ordenar un array Bidimensional en JavaScript

Publicado por Ivan (5 intervenciones) el 15/11/2019 10:46:14
Buenos días, Estoy teniendo problemas a la hora de ordenar un array bidimensional. Lo que debo hacer es esto:
Mostrar los alumnos ordenados por notas en las distintas asignaturas, de mayor a menor. Es un ejercicio de clase.
Os muestro el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
var alumnos = ["Juan", "Pepe", "Alba", "Maria", "Alvaro", "Roberto", "Laura", "Daniel", "Cristina", "David"];
var asignaturas = ["Matemáticas", "Lengua", "Inglés", "Física", "Música"];
//Mostrar la tabla con las notas
function generaAleatorio(min, max) {
    return Math.round(Math.random() * (max - min) + min);
 
}
 
var notas = new Array(asignaturas.length + 1);
notas[0] = new Array();
notas[0].push("X");
for (var i = 0; i < alumnos.length; i++) {
    notas[0].push(alumnos[i]);
}
 
for (var i = 1; i < notas.length; i++) {
    notas[i] = new Array(alumnos.length + 1);
    notas[i][0] = asignaturas[i - 1];
}
 
for (var i = 1; i < notas.length; i++) {
    for (var j = 1; j < notas[i].length; j++) {
        notas[i][j] = generaAleatorio(0, 10);
 
    }
}
 
for (var i = 1; i < notas.length; i++) {
    console.log("Asignatura" + notas[i][0]);
    for (var j = 1; j < notas[i].length; j++) {
        console.log("Alumno " + notas[0][j] + " " + notas[i][j]);
    }
}
 
function NotasOrdenadas() {
    console.log("Notas ordenadas");
    for (var i = 1; i < notas.length; i++) {
        var A = notas[i].slice(1);
        console.log("Asignatura" + notas[i][0]);
        for (var j = 1; j < notas[i].length; j++) {
            if (A.sort(function(a, b) {
                    return b - a;
                })); {
                console.log("Alumno " + notas[0][j] + " " + A);
            }
 
        }
    }
}

Ahora mismo me esta sacando por cada alumno todas las notas ordenadas de todos los alumnos pero debe ordenarse por nota de cada alumno.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro
Val: 1.448
Plata
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Ordenar un array Bidimensional en JavaScript

Publicado por Alejandro (532 intervenciones) el 15/11/2019 18:10:39
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<script>
	var alumnos = ["Juan", "Pepe", "Alba", "Maria", "Alvaro", "Roberto", "Laura", "Daniel", "Cristina", "David"];
	var asignaturas = ["Matemáticas", "Lengua", "Inglés", "Física", "Música"];
	var notas=[];
 
	function generaAleatorio(min, max) {
		return Math.round(Math.random() * (max - min) + min);
	}
 
	function mostrarNotas(notas){
		for(asignatura of notas){
			console.log("Asignatura "+asignatura.nombre);
			for(alumno of asignatura.alumnos){
				console.log("\tAlumno: "+alumno.nombre+", Nota: "+alumno.nota);
			}
		}
	}
 
	// Crea lista de alumnos con notas para cada asignatura
	for(var i=0, t=asignaturas.length; i<t; i++){
		asignatura = asignaturas[i];
		notas.push({'nombre':asignatura,'alumnos':[]});
		for(alumno of alumnos){
			notas[i].alumnos.push({'nombre':alumno, 'nota':generaAleatorio(0, 10)});
		}
	}
 
	console.log("******** NOTAS SIN ORDENAR ********");
	mostrarNotas(notas);
 
	// Ordenar notas
	for(asignatura of notas){
		for(var i=asignatura.alumnos.length-1; i>0; i--){
			for(var j=0; j<i; j++){
				if(asignatura.alumnos[j].nota<asignatura.alumnos[j+1].nota){
					var notaTmp = asignatura.alumnos[j+1];
					asignatura.alumnos[j+1]=asignatura.alumnos[j];
					asignatura.alumnos[j]=notaTmp;
				}
			}
		}
	}
 
	console.log("******** NOTAS ORDENADAS ********");
	mostrarNotas(notas);
</script>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar