用VC的说法就是
struct A
{
  int n;
};struct B
{
  int n;
  A a;
};vector<B> arr;
我的方法:
function PlanUnit(n)
{
for (var i=0; i<n ;i++)
this[i] = {num : 0, context : ""};
}
function Plan(n)
{
for (var i=0; i<n; i++)
{
this[i] = {num : 0, context : "", planunit : new PlanUnit(1)};
}
}
var arr = new Plan(1);
arr[0].num = 1;
arr[0].planunit[0].num = 2;
arr[0].planunit[1] = new PlanUnit(1);
arr[0].planunit[1].num = 3;
var newplan = new Plan(1);
arr[1] = newplan;  // 肯定要声明一个临时的 不这么写不行 不明白为啥 
arr[1].planunit = new PlanUnit(1);
arr[1].planunit[0].num = 2;
arr[1].planunit[1].num = 3;
arr[1].planunit[2] = new PlanUnit(1);
arr[1].planunit[2].num = 3;
上面的程序没问题
但是关键是在new前判断就不行
var arr = new Plan(1);
arr[0].num = 1;
arr[0].planunit[0].num = 2;
arr[0].planunit[1] = new PlanUnit(1);
arr[0].planunit[1].num = 3;
var newplan = new Plan(1);
arr[1] = newplan;
arr[1].planunit = new PlanUnit(1);
arr[1].planunit[0].num = 2;
if (typeof(arr[1].planunit[1]) == undefine)  // 这里就会异常 arr[1].planunit[1] = new PlanUnit(1);
arr[1].planunit[1].num = 3;
arr[1].planunit[2] = new PlanUnit(1);
arr[1].planunit[2].num = 3;
我不想用try 因为感觉应该有更直接的方法 望前辈们指教

解决方案 »

  1.   

    这种代码不知你要干啥。构造函数不是有一个n参数吗?闲着不用。
    function PlanUnit(n)
    {
        for (var i=0; i<n ;i++)
            this[i] = {num : 0, context : ""};
    }
    function Plan(n)
    {
        for (var i=0; i<n; i++)
        {
            this[i] = {num : 0, context : ""};
        }    
    }var arr = new Plan(2);
    arr[0].num = 1;
    arr[0].planunit = new PlanUnit(2);
    arr[0].planunit[0].num = 2;
    arr[0].planunit[1].num = 3;arr[1].planunit = new PlanUnit(3);
    arr[1].planunit[0].num = 2;
    arr[1].planunit[1].num = 3;
    arr[1].planunit[2].num = 3;直接声明json很方便:
    var arr = [
        {
            num: 1,
            planunit: [
                {
                    num: 2
                },
                {
                    num: 3
                }
            ]
        },
        {
            planunit: [
                //....
            ]
        }
    ]
    不利用语言的特性,硬搬其他语言的代码,唉我只蹭分,后续问题找其他人吧
      

  2.   

    我的解决方法:
    PlanUnit = function(n)
    {
    var oThis = new Array();
    //oThis.length += n;
    for (var i=0; i<n; i++)
    {
    oThis[i] = {num : 0, starttime : "", endtime : "", context : "", path : "", re : ""};
    }
    return oThis;
    }PlanKind = function(n)
    {
    var oThis = new Array();
    for (var i=0; i<n; i++)
    {
    oThis[i] = {num : 0, context : "", modtime : "", planunit : new PlanUnit(1) };
    }
    return oThis;
    }if (arrPlanTree[i] == null)
    {
    arrPlanTree[i] = new PlanKind(1);
    arrPlanTree[i].planunit = new PlanUnit(1);
    }
    if (arrPlanTree[i].planunit[j] == null)
    arrPlanTree[i].planunit[j] = new PlanUnit(1);
    大家帮我看看有什么问题 或者更好的方法~~
      

  3.   

    js的 Object 和 Array 完全可以实现你的结构
    逻辑是自己写的