Javascript如何获取子数组长度?

3
我想知道是否有一种方法可以获取二级数组的长度,例如:
var arr = new Array();
arr[0] = new Array();

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

我尝试了这个方法,但是没有成功:

arr[0].length;

干杯!

编辑

下面是邪恶的代码。

这是我用来填充数组的函数,按预期工作:

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

这是一个从数组构建JSON字符串的函数。您可能会注意到,我多次计算子级数组的长度,以防止字符串结束错误,例如,}

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 += '}';
}

每次我打印fll、sll和tll变量中的任何一个的值时,都会得到零。


谢谢,我已经尝试过“两个单词”,但没有成功。 - yoda
1
看着标题,嗯,至少他很一贯。这可比许多程序员强。 - Kenan Banks
1
你应该使用[]来实例化数组,而不是new Array()。两者大致相同,但[]更短,并且Array函数可能会出现问题。 - Cristian Sanchez
谢谢@Daniel,但在这种情况下显然没有改变任何事情,所以我想它不是在胡闹。不过,我会开始使用那种方法 :) - yoda
1
只是好奇:为什么不使用 json2.js 中的 JSON.stringify - Marcel Korpel
@Marcel,我不知道,谢谢! - yoda
3个回答

5

你实际上是在创建一个具有字符串索引的对象。只有当它是真正的数组时,才能获取其长度。

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

查看此问题以获取更多信息:JavaScript对象的长度


所以这里没有选项..我想我必须手动解析JSON字符串的最后一个字符。 - yoda

2

它对我有效:

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

结果:

3

Check for yourself here.


那么这可能与数组键是字符串有关吗? - yoda
@Sarfraz的代码在我的Chrome浏览器上完全按照我的预期工作。我不确定为什么你会遇到这个问题,yoda,但我认为你需要提供更多关于你的环境以及完整的代码示例。 - Adam Crossland
1
这里的数组键不是字符串,它们是数字。是字符串。 - Pointy

2

您拼写错误了吗?请尝试:

arr[0].length;

@yoda - 是的,它确实有用。再检查一遍。 - Kenan Banks
你期望它产生什么,它实际上产生了什么? - Tom Gullen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接