3

I was wondering if there's a way to get the length of a second-level array, for example :

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

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

I tried this, but without success :

arr[0].length;

Cheers!

EDIT

The evil code is as follows.

This is the function that I use to fill the array, wich works as expected :

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();
    }
}

.. and this is a function to build a JSON string from the array. You may notice that I count the sublevel arrays length several times, in order to prevent the string from ending wrong, like ,}

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 I print the value of any of the fll, sll and tll variables, it gives me zero.

yoda
  • 10,834
  • 19
  • 64
  • 92

3 Answers3

5

You are essentially creating an object with the string indexes. You can only get the length if it is a true array.

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

See this question for more info: Length of a JavaScript object

Community
  • 1
  • 1
Stephen Watkins
  • 25,047
  • 15
  • 66
  • 100
  • So there's no option here .. guess I'll have to explode the last character of the JSON string "by hand" – yoda Aug 02 '10 at 18:32
2

Did you mispell it? Try:

arr[0].length;
Tom Gullen
  • 61,249
  • 84
  • 283
  • 456
2

It works for me:

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

Result:

3

Check for yourself here.

Sarfraz
  • 377,238
  • 77
  • 533
  • 578
  • then could it as something to do with the array keys being strings? – yoda Aug 02 '10 at 18:19
  • @Sarfraz's code worked in Chrome for me exactly as I would expect. I'm not sure why you are having this problem, yoda, but I think that you'll need to provide more information about your environment as well as a full code sample. – Adam Crossland Aug 02 '10 at 18:21
  • 1
    The array keys are not strings here, they're numbers. The *values* are strings. – Pointy Aug 02 '10 at 18:22