2011-08-18 12 views
11

Tengo una matriz de matrices (algo así como gráfico), ¿Cómo iterar todas las matrices?bucles a través de matrices de matrices

var parentArray = [ 
[[1,2,3],[4,5,6],[7,8,9]], 
[[10,11,12],[13,14,15],[16,17,18]], 
[[19,20,21],[22,23,24],[26,27,28]] 
]; 

Es solo una matriz de ejemplo, la lata real contiene cualquier cantidad de matriz y luego matrices. ¿Cómo imprimir todos esos números? Su similar a los objetos HTML DOM

+0

relacionada: http://stackoverflow.com/questions/4419537/enhanced-for-loop-in-2d-array-javascript –

Respuesta

15

Esta función recursiva debe hacer el truco con cualquier número de dimensiones:

var printArray = function(arr) { 
    if (typeof(arr) == "object") { 
     for (var i = 0; i < arr.length; i++) { 
      printArray(arr[i]); 
     } 
    } 
    else document.write(arr); 
} 

printArray(parentArray); 
+1

lol, todos estamos publicando la misma función con el mismo nombre. –

+0

xD crazy: P .... –

+0

bueno, el nombre es demasiado obvio :) –

6

Para 2 matrices dimenional:

for(var i = 0; i < parentArray.length; i++){ 
    for(var j = 0; j < parentArray[i].length; j++){ 

     console.log(parentArray[i][j]); 
    } 
} 

Para las matrices con un número desconocido de dimensiones que tiene que utilizar la recursividad:

function printArray(arr){ 
    for(var i = 0; i < arr.length; i++){ 
     if(arr[i] instanceof Array){ 
      printArray(arr[i]); 
     }else{ 
      console.log(arr[i]); 
     } 
    } 
} 
0

que usaría bucles for anidados aquí . El bucle externo iteraría la matriz principal, proporcionándole una de las matrices internas cada vez. El lazo interno le daría los elementos dentro de cada conjunto. Ejemplo:

for(childArray in parentArray){ 
    for(item in childArray){ 
     //do stuff here to each number 
    } 
} 
+0

No debe dar el bucle sobre matrices con 'para in'. – pimvdb

+0

Estoy de acuerdo, no es la mejor opción. Sugiero leer antes de intentar usarlo http://blog.niftysnippets.org/2010/11/myths-and-realities-of-forin.html – yoozer8

1

Si usted tiene un DOM como la estructura, es necesario recorrer de forma recursiva a través de los elementos. Algo así debería funcionar:

function printArray(array) { 
    for (var i = 0; i < array.length; i++) { 
     var v = array[i]; 
     if (v instanceof Array) { 
      printArray(v); 
     } else { 
      console.log(v); 
     } 
    } 
} 
4

Una opción sería utilizar la recursividad que trabaja con cualquier número de profundidades. Ver traverse(), no está probado, pero debe dar una idea aproximada:

String.prototype.lpad = function(padString, length) { 
    var str = this; 
    while (str.length < length) 
     str = padString + str; 
    return str; 
} 

var level = 0; 

function traverse(obj) { 
    if (obj instanceof Array) { level++; for(var i in obj) traverse(obj[i]); level--; } 
    else console.log(''.lpad('-', level) + obj); 
} 
6

lo que hay que hacer es algo como esto

var parentArray = [ 
[[1,2,3],[4,5,6],[7,8,9]], 
[[10,11,12],[13,14,15],[16,17,18]], 
[[19,20,21],[22,23,24],[26,27,28]] 
]; 

for(int i = 0; i < parentArray.length;i++){ 
    var value = parent[i]; 

    for(int j = 0; j < parent[i].length; j++){ 
     var innerValue = parent[i][j]; 
    } 
} 

Así que esto será como un bucle anidado, entonces hay donde innerValue y valor es que puede hacer algunas operaciones, espero que ayude

4

si solo desea imprimir todos los miembros, ¿qué tal esto?

var items = parentArray.toString().split(","); 
for(var i=0,j=items.length;i<j;i++) 
    console.log(items[i]);