перебирая массивы массивов - PullRequest
15 голосов
/ 18 августа 2011

У меня есть массивы массивов (что-то вроде графа). Как перебрать все массивы?

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

Это просто примерный массив, фактический может содержать любое количество массивов, а затем массивов. Как напечатать все эти цифры? Это похоже на HTML объекты DOM

Ответы [ 7 ]

17 голосов
/ 18 августа 2011

Эта рекурсивная функция должна работать с любым числом измерений:

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);
10 голосов
/ 18 августа 2011

Для 2-х мерных массивов:

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

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

Для массивов с неизвестным числом измерений вы должны использовать рекурсию:

function printArray(arr){
    for(var i = 0; i < arr.length; i++){
        if(arr[i] instanceof Array){
            printArray(arr[i]);
        }else{
            console.log(arr[i]);
        }
    }
}
7 голосов
/ 18 августа 2011

что вам нужно сделать, это что-то вроде

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

Так что это будет похоже на вложенный цикл, тогда там, где innerValue и значение, вы можете выполнять некоторые операции, надеюсь, это поможет

4 голосов
/ 18 августа 2011

если вы просто хотите распечатать всех участников, как насчет этого?

var items = parentArray.toString().split(",");
for(var i=0,j=items.length;i<j;i++)
    console.log(items[i]);
4 голосов
/ 18 августа 2011

Один из вариантов - использовать рекурсию, которая работает с любым количеством операций . См. traverse(), это не проверено, но должно дать приблизительное представление:

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);
}
1 голос
/ 18 августа 2011

Если у вас есть DOM-подобная структура, вам нужно рекурсивно перебирать элементы. Нечто подобное должно работать:

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);
        }
    }
}
0 голосов
/ 18 августа 2011

Вы бы использовали здесь вложенные циклы.Внешний цикл будет повторять родительский массив, каждый раз давая вам один из внутренних массивов.Внутренний цикл даст вам элементы в каждом массиве.Пример:

for(childArray in parentArray){
    for(item in childArray){
        //do stuff here to each number
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...