2011-08-18 34 views
11

Tôi có một mảng mảng (một số điều như đồ thị), Làm thế nào để lặp lại tất cả các mảng?looping thông qua mảng mảng

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

Chỉ là mảng mẫu, thực tế có thể chứa bất kỳ số mảng và mảng nào sau đó. Làm thế nào để in tất cả những con số? tương tự của nó để html đối tượng DOM

+0

liên quan: http://stackoverflow.com/questions/4419537/enhanced-for-loop-in-2d-array-javascript –

Trả lời

15

hàm đệ quy này nên làm các trick với bất kỳ số lượng kích thước:

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, tất cả chúng tôi đều đăng cùng chức năng với cùng tên. –

+0

xD điên: P .... –

+0

tốt, tên quá rõ ràng :) –

6

Đối với 2 Mảng dimenional:

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

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

Đối với mảng với một số không rõ kích thước bạn phải sử dụng đệ quy:

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

Bạn sẽ sử dụng lồng nhau cho vòng ở đây . Vòng lặp bên ngoài sẽ lặp lại mảng cha, cung cấp cho bạn một trong các mảng nội bộ mỗi lần. Vòng lặp bên trong sẽ cung cấp cho bạn các mục trong mỗi mảng. Ví dụ:

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

Bạn không nên lặp trên mảng với 'cho in'. – pimvdb

+0

Tôi đồng ý, đó không phải là lựa chọn tốt nhất. Tôi khuyên bạn nên đọc trước khi thử sử dụng nó http://blog.niftysnippets.org/2010/11/myths-and-realities-of-forin.html – yoozer8

1

Nếu bạn có một DOM như cấu trúc, bạn cần phải đệ quy lặp thông qua các yếu tố. Một cái gì đó như thế nên làm việc:

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

Một lựa chọn sẽ được sử dụng đệ quy mà làm việc với bất kỳ số lượng dephts. Xem traverse(), nó chưa được thử nghiệm nhưng nên đưa ra một ý tưởng thô:

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

những gì bạn cần làm là một cái gì đó như thế này

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

Vì vậy, đây sẽ giống như một vòng lặp lồng nhau, sau đó có nơi innerValue và giá trị là bạn có thể thực hiện một số hoạt động, hy vọng nó sẽ giúp

4

nếu bạn chỉ muốn in tất cả các thành viên, làm thế nào về điều này?

var items = parentArray.toString().split(","); 
for(var i=0,j=items.length;i<j;i++) 
    console.log(items[i]); 
Các vấn đề liên quan