动态添加到多维数组javascript?

时间:2016-01-02 15:24:31

标签: javascript arrays

var oparea = [];
var mainarr_index = 0;

$("input.oparea-name").each(function(opera_key) {                                  
    var name_oparea = $(this);
    oparea[mainarr_index]['maincat']['name'] = name_oparea.val(); //Add to array

    $(subcats).each(function(index) { 
        oparea[mainarr_index]['subcat']['name'].push(name_subcat);
    }

    mainarr_index++;
}

我想要的结果:

oparea[0]['maincat']['name'] = 'name of oparea1';
oparea[0]['maincat']['subcat'] = array('name' => array('subcatname1', 'subcatname2'));

oparea[1]['maincat']['name'] = 'name of oparea2';
oparea[1]['maincat']['subcat'] = array('name' => array('subcatname1', 'subcatname2'));

//等等

我在控制台中得到的结果是:

  

未捕获的TypeError:无法读取属性' maincat'未定义的

当然它未定义,因此我想定义它; - )

我如何实现我的目标?

2 个答案:

答案 0 :(得分:2)

如果没有任何对象可以开始,则无法设置对象的属性。如果数组还没有被创建,你就无法推入数组(我怀疑你已经习惯了PHP,必要时会自动填充这些数据)。

您可以使用.push将新对象添加到数组中,而不是使用oparea_index变量。

$("input.oparea-name").each(function(opera_key) {                                  
    var name_oparea = $(this);
    var new_oparea = {
        maincat: {
            name: name_oparea.val()
        },
        subcat: {
            name: []
        }
    };

    $(subcats).each(function(index) { 
        new_oparea.subcat.name.push(name_subcat);
    }

    oparea.push(new_oparea);
}

答案 1 :(得分:1)

var oparea = [];
$("input.oparea-name").each(function(opera_key) {                                  
    var name_oparea = $(this);
    if(!oparea[mainarr_index]){
        oparea[mainarr_index]={};
    }
    if(!oparea[mainarr_index]['maincat']){
        oparea[mainarr_index]['maincat']={};
    }
    oparea[mainarr_index]['maincat']['name'] = name_oparea.val(); //Add to array

    $(subcats).each(function(index) { 
        if(!oparea[mainarr_index]){
            oparea[mainarr_index]={};
        }
        if(!oparea[mainarr_index]['subcat']){
            oparea[mainarr_index]['subcat']={};
        }
        if(!oparea[mainarr_index]['subcat']['name']){
            oparea[mainarr_index]['subcat']['name']=[];
        }
        oparea[mainarr_index]['subcat']['name'].push(name_subcat);
    }
}