代码之家  ›  专栏  ›  技术社区  ›  yoda

获取子数组长度

  •  4
  • yoda  · 技术社区  · 14 年前

    我想知道是否有办法获得二级数组的长度,例如:

    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变量的值时,它都给我零。

    3 回复  |  直到 14 年前
        1
  •  5
  •   Community leo1    7 年前

    实际上,您是在用字符串索引创建一个对象。只有当它是真数组时才能得到长度。

    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
    

    有关详细信息,请参见此问题: Length of a JavaScript object

        2
  •  2
  •   Tom Gullen    14 年前

    你是不是说错了?尝试:

    arr[0].length;
    
        3
  •  2
  •   Sarfraz    14 年前

    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.