2012-04-19 53 views
7

Làm thế nào để có được kích thước cho một mảng đa chiều?
Chỉnh sửa: có thể có kích thước 1, 2 hoặc 3 nhưng mỗi mảng phụ có cùng độ dài.Lấy kích thước của các kích thước trong mảng

tức là cho

var a = [[1,1,1], [1,1,1]] 

sẽ là [2,3]

+3

[Bạn đã thử gì?] (http://mattgemmell.com/2008/12/08/what-have-you-trie d)) – j08691

+0

Danh sách phụ có kích thước khác nhau là gì? –

+0

Cho đến nay, đây là câu trả lời hay nhất tôi đã tìm thấy: http://stackoverflow.com/a/13814933/975097 –

Trả lời

1
var dim = [ 
    a.length, 
    a[0].length 
]; 

này nên làm việc, cho rằng mỗi mảng phụ là chiều dài tương tự, tuy nhiên, nếu thats không phải là trường hợp, bạn có thể muốn làm một cái gì đó như:

function findDim(a){ 
    var mainLen = 0; 
    var subLen = 0; 

    mainLen = a.length; 

    for(var i=0; i < mainLen; i++){ 
     var len = a[i].length; 
     subLen = (len > subLen ? len : subLen); 
    } 

    return [mainLen, subLen]; 
}; 
10
var dimensions = [ arr.length, arr[0].length ]; 

Công trình này cho độ dài mảng bên trong không bao giờ thay đổi.

+0

'" ["+ arr.length +", "+ arr [0] .length +"] "' :) – ajax333221

0
var a = [[1,1,1], [1,1,1]]; 
var size=[]; 
while(s=a.pop) size.push(s.length); 

Hoặc nếu bạn muốn có chiều dài bên trong a:

var a = [[1,1,1], [1,1,1]]; 
for(i in a) a[i]=a[i].length; 

Edit: Tôi xin lỗi, tôi đã không ở đề tài này. Đoạn mã sau tính hàng và cột tối đa cho mảng hai chiều.

var innerSize = 0, i=0, l=a.length, l2; 
for(;i<l;i++) if(innerSize<(l2=a[i].length)) innerSize = l2 
[l, innerSize] 

Bạn có thể thay đổi <-> nếu bạn muốn kích thước tối thiểu.

6

Xét rằng danh sách phụ có thể có kích thước khác nhau, có kích thước tối thiểu hoặc tùy thuộc vào nhu cầu làm cho nó max

function size(ar){ 
    var row_count = ar.length; 
    var row_sizes = [] 
    for(var i=0;i<row_count;i++){ 
     row_sizes.push(ar[i].length) 
    } 
    return [row_count, Math.min.apply(null, row_sizes)] 
} 
size([[1, 1, 1], [1, 1, 1]]) 

Output:

[2, 3] 
+0

Công việc này có làm việc cho các mảng của bất kỳ thứ nguyên nào hay chỉ cho mảng hai chiều? –

+1

@AndersonGreen nó chỉ dành cho hai chiều, nhưng một cuộc gọi đệ quy nên làm cho nó hoạt động cho N dimesnions –

1

này làm việc cho bất cứ điều gì kích thước (giả rằng mỗi phụ mảng có cùng độ dài):

function getDim(a) { 
    var dim = []; 
    for (;;) { 
     dim.push(a.length); 

     if (Array.isArray(a[0])) { 
      a = a[0]; 
     } else { 
      break; 
     } 
    } 
    return dim; 
} 
Các vấn đề liên quan