2012-04-19 20 views
7

Come ottenere le dimensioni fornite da un array multidimensionale?
Modifica: potrebbe essere di 1, 2 o 3 dimensioni, ma ciascuna sottoschiera ha la stessa lunghezza.Ottieni dimensioni delle dimensioni nell'array

cioè per

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

sarebbe [2,3]

+3

[Cosa hai provato?] (http://mattgemmell.com/2008/12/08/what-have-you-trie d /) – j08691

+0

cosa sono le sotto-liste sono di dimensioni diverse? –

+0

Finora, questa è la migliore risposta che ho trovato: http://stackoverflow.com/a/13814933/975097 –

risposta

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

Questo dovrebbe funzionare, dato che ogni sub-array è la stessa lunghezza, tuttavia, se questo è il caso, potrebbe desiderare di fare qualcosa di simile:

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

Questo funziona dato che la lunghezza degli array interni non cambia mai.

+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); 

Oppure, se si vuole avere la lunghezza interna a:

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

Edit: Mi scuso, non ero nel soggetto. Il seguente codice calcola la riga e la colonna massime per una matrice bidimensionale.

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

È possibile modificare il <-> se si desidera che la dimensione minima.

6

Considerando che le liste sub possono avere dimensioni diverse, ottiene la dimensione minima o seconda delle necessità rendono 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]]) 

uscita:

[2, 3] 
+0

Funzionerebbe per array di qualsiasi dimensione, o solo per array bidimensionali? –

+1

@AndersonGreen è solo per due dimensioni, ma una chiamata ricorsiva dovrebbe farlo funzionare per N dimesioni –

1

Questo funziona per qualsiasi dimensione (supponendo che ogni sub array ha la stessa lunghezza):

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

     if (Array.isArray(a[0])) { 
      a = a[0]; 
     } else { 
      break; 
     } 
    } 
    return dim; 
} 
Problemi correlati