2010-08-02 5 views
4

Je me demandais s'il y a un moyen d'obtenir la longueur d'un tableau de second niveau, par exemple:javascript obtenir une longueur sous-tableau

var arr = new Array(); 
arr[0] = new Array(); 

arr[0][0] = 'a'; 
arr[0][1] = 'a'; 
arr[0][2] = 'a'; 

J'ai essayé, mais sans succès:

arr[0].length; 

À votre santé!

EDIT

Le code du mal est le suivant.

C'est la fonction que j'utilise pour remplir le tableau, les travaux Wich comme prévu:

function input_text(action, id) { 
    if (action == 'add') { 
     var i = info.length; 
     if (i != 0) i++; 
     info[i] = new Array(); 
     info[i]['type'] = 'input'; 
     info[i]['subtype'] = 'text'; 
     info[i]['nome'] = $('#input_text_form input[name="input_text_nome"]').val(); 
     info[i]['name'] = $('#input_text_form input[name="input_text_name"]').val(); 
     info[i]['id'] = $('#input_text_form input[name="input_text_id"]').val(); 
     info[i]['maxlenght'] = $('#input_text_form input[name="input_maxlenght"]').val(); 
     info[i]['default'] = $('#input_text_form input[name="input_text_default"]').val(); 
     info[i]['js'] = $('#input_text_form input[name="input_text_js"]').val(); 
    } 
} 

.. et c'est une fonction pour construire une chaîne JSON à partir du tableau. Vous remarquerez peut-être que je compte la longueur des tableaux de sous-niveaux à plusieurs reprises, afin d'éviter que la chaîne de mettre fin à mal, comme ,}

function toJSON() { 
    var fll = info.length; 
    var sll = 0; 
    var tll = 0; 
    var i; 
    var x; 
    var z; 
    var w; 
    var b; 
    json = '{'; 
    for (i in info) { 
     json += '"'+i+'":{'; 
     sll = info[i].length; 
     alert(sll); 
     z = 0; 
     for (x in info[i]) { 
      if ($.isArray(info[i][x])) { 
       json += '"'+x+'":{'; 
       tll = info[i][x].length; 
       w = 0; 
       for (b in info[i][x]) { 
        tll == w ? json += '"'+b+'" : "'+info[i][x][b]+'"' : json += '"'+b+'" : "'+info[i][x][b]+'",'; 
        w++; 
       } 
       sll == z ? json += '}' : json += '},'; 
      } else { 
       sll == z ? json += '"'+x+'" : "'+info[i][x]+'"' : json += '"'+x+'" : "'+info[i][x]+'",'; 
      } 
      z++; 
     } 
     fll == i ? json += '}' : json += '},'; 
    } 

    json += '}'; 
} 

Everytime imprimer la valeur de l'un des FLL, SLL et TLL variables, il donne moi zéro.

+2

Vous longueur mal orthographié. –

+0

merci, encore, j'ai essayé avec "les deux mots" sans succès. – yoda

+1

* Regard sur le titre * Eh bien, au moins, il est cohérent. Plus que je peux dire pour beaucoup de programmeurs. – Triptych

Répondre

5

Vous créez essentiellement un objet avec les index de chaîne. Vous pouvez seulement obtenir la longueur si c'est un vrai tableau.

arr[0] = []; 
arr[0][0] = 134; 
arr[0][1] = 264; 

arr[0].length; // will work 

arr[1] = {}; 
arr[1]['str1'] = 134; 
arr[1]['str2'] = 256; 

arr[1].length; // will not work 

Voir cette question pour plus d'informations: Length of a JavaScript object

+0

Donc, il n'y a pas d'option ici .. je suppose que je vais devoir exploser le dernier caractère de la chaîne JSON "à la main" – yoda

2

L'avez-vous mal orthographié? Essayez:

arr[0].length; 
+0

+1 .. ce sont les pires bugs :) – Anurag

+0

comme je l'ai dit plus haut, ça ne marche pas non plus. – yoda

+0

@yoda - Oui c'est le cas. Revérifier. – Triptych

2

Il fonctionne pour moi:

var arr = new Array(); 
arr[0] = new Array(); 

arr[0][0] = 'a'; 
arr[0][1] = 'a'; 
arr[0][2] = 'a'; 

console.log(arr[0].length); 

Résultat:

3 

Check for yourself here.

+0

alors pourrait-il quelque chose à faire avec les clés de tableau étant des chaînes? – yoda

+0

@yoda: Cela fonctionne comme vous l'avez posté, vérifiez ici: http: // jsbin.com/uyoda3 – Sarfraz

+0

@ Le code de Sarfraz a fonctionné dans Chrome pour moi exactement comme je m'attendais. Je ne sais pas pourquoi vous avez ce problème, yoda, mais je pense que vous devrez fournir plus d'informations sur votre environnement ainsi qu'un échantillon de code complet. –

Questions connexes