Tabla bidimensional javascript

B

Buenas,

Tengo que hacer un ejercicio donde utilizó tablas bidimensionales en Javascript. El ejercico consta de hacer una tabla (doble) con las diferentes notas de una serie de alumnos.

Como entrada tengo estas notas:

var taula1 = [8.6,7.5,6.9,9.2,5.1,4.6,7.5,9.9,8.6,7.5,6.9,9.2,5.1,4.6,7.5,9.9,8.6,7.5,6.9,9.2,5.1];

Y tengo que convertir esta tabla simple en una doble para asignar cada 7 notas a un alumno. Es decir:

8.6,7.5,6.9,9.2,5.1,4.6,7.5
9.9,8.6,7.5,6.9,9.2,5.1,4.6
7.5,9.9,8.6,7.5,6.9,9.2,5.1

El tema es que tengo el siguiente codigo para que cada 7 notas me haga un salto y quedo como el ejemplo anterior, pero no me acaba de funcionar:

var taula1 = [8.6,7.5,6.9,9.2,5.1,4.6,7.5,9.9,8.6,7.5,6.9,9.2,5.1,4.6,7.5,9.9,8.6,7.5,6.9,9.2,5.1];

for (var i = 0; i < taula1.length; i++) {
  taula1[i] = Array(7);
}


console.log(taula1);

Alguien me puede decir dode fallo? Gracias

P

console.log([[8.6,7.5,6.9,9.2,5.1,4.6,7.5],
[9.9,8.6,7.5,6.9,9.2,5.1,4.6],
[7.5,9.9,8.6,7.5,6.9,9.2,5.1]])

1 respuesta
B

#2 No hay forma de hacerlo automaticamente sin tener que poner en el console.log todo eso?

Porque si hago eso, no tiene en cuenta los valores del "var taula1"

Fyn4r

El fallo esta en que intentas hacer magia.
La cabecera del bucle esta bien (creo), pero en el cuerpo no sé qué intentas hacer

1 respuesta
B

#4 Quiero pasar de una tabla simple con una serie de notas, a una tabla bidimensional. Son 140 notas (en el ejemplo he puesto menos) en una tabla simple que quiero pasar a una tabla bidimensional y quedara: 20 lineas de notas con 7 notas por linea.

En la tabla simple, cada 7 notas tiene que crear un salto y hacer otra linea de notas.

1 respuesta
Fyn4r

#5 así en resumen vas a necesitar 2 índices, 1 para cada "subtabla" y otro para cada posición (nota) dentro de la tabla. No puedo concretar mucho más porque ni recuerdo como declarar listas en JavaScript xd

1 respuesta
B

#6 dos incides te refieres a dos fors?

2 respuestas
Fyn4r

#7 si, la cosa es que si tienes 140 ( o las que sean) notas y si las quieres agrupar de 7 en 7 te salen 140/7 = 20 filas en la nueva tabla.

Entonces coges un for de 0 a 20 (indexas cada una de las subtablas, índice i por ejemplo) y dentro de ese for otro de 0 a 7 (indexa cada una de las notas dentro de una tabla, índice j por ejemplo).
En cada iteración tendrás:

tabla_doble[i][j] = tabla1[i * 7 + j]

Estoy en el móvil así que estará mal explicado y probablemente sea una forma enrevesada de hacerlo, pero debería funcionar xd

1 2 respuestas
D10X

#7 Es q no estas haciendo una tabla bimendisional, realmente no se como has llegado a concluir q esa es la solucion. Un array bidimensional tiene dos indices, es decir:

notas[x] = [0,1,2,3,4,5] tiene una sola dimension.

notas[x][y] = [ [0,1,2] , [3,4] , [5] ] tiene dos dimensiones.

Luego, el otro punto es lo de sobrescribir el mismo array q recorres ... q en este caso es una barbaridad, y cascandole un Array(7) .

Tu codigo, lo que dibuja deberia ser:

[[undefined, undefined, undefined, undefined, undefined, undefined, undefined], [undefined, undefined, undefined, undefined, undefined, undefined, undefined], [undefined, undefined, undefined, undefined, undefined, undefined, undefined], [undefined, undefined, undefined, undefined, undefined, undefined, undefined], [undefined, undefined, undefined, undefined, undefined, undefined, undefined], [undefined, undefined, undefined, undefined, undefined, undefined, undefined], [undefined, undefined, undefined, undefined, undefined, undefined, undefined], [undefined, undefined, undefined, undefined, undefined, undefined, undefined], [undefined, undefined, undefined, undefined, undefined, undefined, undefined], [undefined, undefined, undefined, undefined, undefined, undefined, undefined], [undefined, undefined, undefined, undefined, undefined, undefined, undefined], [undefined, undefined, undefined, undefined, undefined, undefined, undefined], [undefined, undefined, undefined, undefined, undefined, undefined, undefined], [undefined, undefined, undefined, undefined, undefined, undefined, undefined], [undefined, undefined, undefined, undefined, undefined, undefined, undefined], [undefined, undefined, undefined, undefined, undefined, undefined, undefined], [undefined, undefined, undefined, undefined, undefined, undefined, undefined], [undefined, undefined, undefined, undefined, undefined, undefined, undefined], [undefined, undefined, undefined, undefined, undefined, undefined, undefined], [undefined, undefined, undefined, undefined, undefined, undefined, undefined], [undefined, undefined, undefined, undefined, undefined, undefined, undefined]]

Vamos, un array de 7 posiciones sin definir, en cada posicion del array taula1.

Revisa los arrays en JS, porque estas muy desenfocado.

#8 Pero ese ejemplo, esta mal, el x7 hara q se salte los 7 primeros (como minimo).

1 3 respuestas
Fyn4r

#9 igual puse mal los índices con las prisas, pero piensa que en la primera iteración i = 0 y solo tienes en cuenta j que va de 0 al 7, luego del 8 al 15 (con i=1) y asi

1 respuesta
D10X

#10 Vale, en mi cabeza el for era diferente, pero creo q tienes razon.

B

He consegido que me muestre en pantalla la estructura de la tabla bidimensional:

var visites = [8.6,7.5,6.9,9.2,5.1,4.6,7.5,9.9,5.5,7.8];
var i;

for (i = 0; i < 20; i++) {
visites[i] = Array(7);

console.log(visites[i]);
}

Ahora necessito que los numeros se introduzcan en casa tabla, pero no se como hacerlo

1 respuesta
Nacht

No quiero parecer borde, pero es mejor que no te den la solución directa, sino no aprenderás nunca :/

1 1 respuesta
ShodawN

#12 Vamos a ver, #9 creo que te lo ha explicado bastante bien... voy a intentarlo yo a ver si lo pillas.

var visites = [8.6,7.5,6.9,9.2,5.1,4.6,7.5,9.9,5.5,7.8];

Esto crea un array, donde cada posición contiene uno de los valores (cada nota)... array de una dimensión.

visites[i] = Array(7);

Esto sustituye el valor que has definido arriba por un array de 7 posiciones (un array vacío).... el resultado es que visites es un array bidimensional (vacío pero bidimensional xD).

Dicho esto, espero que veas que lo que haces no tiene sentido.

#8 Te ha dado la solución, así que no mires mi spoiler... haz caso de lo que te dice, piensa y encontrarás la solución.
Piensa sobretodo en la parte de código que pone... está pasando los valores de un array a otro... necesitas dos arrays diferentes, y necesitas pasar los datos de uno al otro.

Si pasas de mi consejo en el spoiler tienes la solución... pero piensa que esto es algo muy básico, y si no lo pillas bien puedes ir olvidandote de programar nada.

spoiler



Para acabar diré que me parece mucho mejor respuesta la de #13 que la mía.

1
QuitCat

#9
Por matizar un poco

notas[x] = [0,1,2,3,4,5] tiene una sola dimension.
notas[x][y] = [ [0,1,2] , [3,4] , [5] ] tiene dos dimensiones.

Los dos ejemplos que has puesto son array multidimensionales, ya que para considerarse un array multidimensional simplemente tiene que contener otro array en cada una de sus posiciones (y seguir este proceso para conseguir las "dimensiones" que quieras). Por lo tanto tu primer ejemplo donde dices que tiene una sola dimensión en verdad es bidimensional.

notas[0] = [0,1,2,3,4,5]
console.log(notas[0][5]) -> 5
Axtrix

Creas una funcion que te divida el array grande en grupos de n items

const chunker =(arr, n) => {
  const holder = []
  for (let i = 0; i < arr.length; i += n) {
    holder.push(arr.slice(i, i + n));
  }
  return holder
}

Luego solo le pasas tu array y n

const tablas = [8.6,7.5,6.9,9.2,5.1,4.6,7.5,9.9,8.6,7.5,6.9,9.2,5.1,4.6,7.5,9.9,8.6,7.5,6.9,9.2,5.1]
const chunkedArr = chunker(tablas, 7)

Más o menos

Si quieres saber más sobre "chunkear" arrays => https://stackoverflow.com/questions/8495687/split-array-into-chunks

Usuarios habituales