2012-03-15 13 views
19

Me gustaría saber cómo declarar 2 arrays dimensionales en java script de algo fijo longitudes similares,¿Cómo declaro dos matrices dimensionales en javascript?

var array = new Array[this.rows, this.columns]; 

después de eso me gustaría obtener la longitud de cada dimensión como,

array[0].length; // i am assuming this would give me the first dimension like in C# array.GetLength(0); 
array[1].length; // i am assuming this would give me the second dimension like in C# array.GetLength(1); 

cualquier ayuda es apreciada, gracias.

Respuesta

30

Un ejemplo rápido de lo que @SLaks se refiere a las matrices irregulares. Básicamente, colocas una matriz en una matriz. El siguiente ejemplo muestra una forma de hacer una matriz de 100x100.

var arr = []; 
for(var x = 0; x < 100; x++){ 
    arr[x] = [];  
    for(var y = 0; y < 100; y++){ 
     arr[x][y] = x*y;  
    }  
} 

console.log(arr[10][11]); 

Live Demo

Este método es muy flexible por ejemplo arr[4] podría tener una matriz indexada a 10, y arr[5] podría tener una matriz con 1 valor, o ser incluso ser un tipo completamente diferente, como una cadena o número.

+0

Hola Loktar, gracias. Me gusta la demostración y ¿cómo obtengo las dimensiones de la matriz? la primera dimensión y la segunda dimensión? –

+1

@Kathy Suponiendo que las longitudes de la matriz son iguales en número (piense en una tabla de ajedrez 8x8) puede hacer 'arr.length', y' arr [0] .length'. Ese sería el "ancho" y "alto" – Loktar

3

A diferencia de C#, Javascript no admite matrices multidimensionales.

En su lugar, puede utilizar arrays anidados ("dentados").

+0

gracias Slaks, y ¿cómo obtengo la longitud de cada dimensión? –

+2

No hay longitud de cada dimensión. Es solo una matriz de matrices; cada matriz tiene su propia longitud. – SLaks

+1

_ "Javascript no admite matrices multidimensionales" _ - Pero la matriz de matrices proporciona el equivalente de matrices multidimensionales, por lo que se puede decir que JavaScript SOPORTA matrices multidimensionales (incluso si no son _truly_ multidimensionales, I piense que su primera oración no es _truly_ correcta en esta forma :)). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Predefined_Core_Objects#Multi-Dimensional_Arrays (Por cierto, creo que su respuesta realmente no responde la pregunta.;)) – Sk8erPeter

1

Una matriz de 3x3 anidada (de undefined):

var arr = new Array(3); 
 
for (var i = 0; i < arr.length; ++i) { 
 
    arr[i] = new Array(3); 
 
} 
 

 
console.log(arr);


modle13 comentó que está restringido a un tamaño fijo sub-matriz, así que aquí está una rápida Pellizque para evitar eso:

var nestedSizes = [3,5,1,4]; 
 
var arr = new Array(nestedSizes.length); 
 
for (var i = 0; i < arr.length; ++i) { 
 
    arr[i] = new Array(nestedSizes[i]); 
 
} 
 

 
console.log(arr);

+0

¿Qué pasa con mi respuesta? – c24w

+0

Funciona para mis propósitos: el tutorial Reac tic-tac-toe. Una afirmación podría ser que está restringido a la misma cantidad de índices para cada matriz secundaria. – modle13

2

En javascript:

var Matrix = function (rows, columns) { 
    this.rows = rows; 
    this.columns = columns; 
    this.myarray = new Array(this.rows); 
    for (var i=0; i < this.columns; i +=1) { 
     this.myarray[i]=new Array(this.rows) 
    } 
    return this.myarray; 
} 

var m = new Matrix(2,2); 
m; // [[undefined, undefined], [undefined, undefined]]; 

var m2 = new Matrix(3,3); 
m2; // [[undefined, undefined, undefined], [undefined, undefined, undefined], [undefined, undefined, undefined]] 
-3

podría no simplemente hacer algo como esto?

var x = new Array(4);    #1st array, array of arrays        
y = new Array(1, 4, 2, 0);  #2nd dimension of arrays, an array of values     
z = new Array(4, 8, 3, 9);  #^^^      
a = new Array(7, 0, 2, 4);  #^^^     
t = new Array(9, 0, 3, 1);  #^^^ 

a continuación para acceder a 7 (el primero valor) en la matriz a (3) se puede escribir:

var example = x.3.1 

si esto no funcionará por favor dígame cos esto es lo que me dijeron y lo im ahora usando para programar mi juego

+2

err ... no, esto no funcionará. Lo que tienes aquí es 5 matrices distintas que de ninguna manera están relacionadas. –

Cuestiones relacionadas