web-dev-qa-db-fra.com

en boucle à travers des tableaux de tableaux

J'ai un tableau de tableaux (quelque chose comme un graphique), Comment itérer tous les tableaux?

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]]
];

C'est juste un exemple de tableau, réel peut contenir un nombre quelconque de tableaux, puis de tableaux. Comment imprimer tous ces chiffres? C'est similaire aux objets HTML DOM

12
coure2011

Cette fonction récursive devrait faire l'affaire avec n'importe quel nombre de dimensions:

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);
16
Sascha Galley

Pour les tableaux à 2 dimensions:

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

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

Pour les tableaux avec un nombre inconnu de dimensions, vous devez utiliser la récursivité:

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

ce que vous devez faire est quelque chose comme ça

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];
   }
}

Donc, cela ressemblera à une boucle imbriquée, puis là où innerValue et la valeur est que vous pouvez faire certaines opérations, espérons que cela aide

7
Shane Van Wyk

si vous voulez seulement imprimer tous les membres, que dites-vous de cela?

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

Une option serait d'utiliser la récursivité qui fonctionne avec un nombre quelconque de profondeurs . Voir traverse(), ce n'est pas testé mais devrait donner une idée approximative:

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);
}
4
Saul

Si vous avez une structure de type DOM, vous devez effectuer une itération récursive à travers les éléments. Quelque chose comme ça devrait marcher:

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);
        }
    }
}
1
this.lau_

Vous utiliseriez ici des boucles imbriquées. La boucle externe itérerait le tableau parent, vous donnant l’un des tableaux internes chaque fois La boucle interne vous donnerait les éléments de chaque tableau. Exemple:

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