views:

114

answers:

3

Hi,

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.

+2  A: 

Did you mispell it? Try:

arr[0].length;
Tom Gullen
+1 .. these are the worst kind of bugs :)
Anurag
as I said above, it doesn't work either.
yoda
@yoda - Yes it does. Check again.
Triptych
What are you expecting it to produce, and what is it producing?
Tom Gullen
I'll post the evil code, 1 sec
yoda
You misspelled misspell ;-)
stjowa
first post updated
yoda
+2  A: 

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
then could it as something to do with the array keys being strings?
yoda
@yoda: It works as you have posted, check here: http://jsbin.com/uyoda3
Sarfraz
@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
The array keys are not strings here, they're numbers. The *values* are strings.
Pointy
initial post updated
yoda
+3  A: 

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: http://stackoverflow.com/questions/5223/length-of-javascript-associative-array

stjowa
So there's no option here .. guess I'll have to explode the last character of the JSON string "by hand"
yoda