简体   繁体   English

具有命名和编号索引的Javascript多维对象

[英]Javascript Multi Dimensional Object with named and numbered Index

How to store this structure in javascript object, tried many ways, but couldn't find a complete solution. 如何将这种结构存储在javascript对象中,尝试了多种方法,但找不到完整的解决方案。

var Scheduling = new Object();

//first Milestone
Scheduling[0]['MilestoneName'] = "Milestone One";
    //Subtask List
    Scheduling[0]['SubTask'][0]['SubTaskName'] = "SubTask One";
    Scheduling[0]['SubTask'][0]['CompletionPercent'] = "50";

    Scheduling[0]['SubTask'][1]['SubTaskName'] = "SubTask Two";
    Scheduling[0]['SubTask'][1]['CompletionPercent'] = "80";

//Second Milestone
Scheduling[1]['MilestoneName'] = "Milestone Two";

    Scheduling[1]['SubTask'][0]['SubTaskName'] = "SubTask One";
    Scheduling[1]['SubTask'][0]['CompletionPercent'] = "20";

    Scheduling[1]['SubTask'][1]['SubTaskName'] = "SubTask Two";
    Scheduling[1]['SubTask'][1]['CompletionPercent'] = "15";


console.log(JSON.stringify[x]);

在此处输入图片说明

You need to initialize each object before assigning their properties. 您需要在分配每个对象的属性之前对其进行初始化。 Try adding this; 尝试添加这个;

Scheduling[0]={};

And you need to initialize each nested object and array along the way before assigning their properties. 而且,在分配它们的属性之前,您需要一路初始化每个嵌套的对象和数组。

I updated first part of your code as follows: 我更新了代码的第一部分,如下所示:

 var Scheduling = new Object(); Scheduling[0] = {}; //first Milestone Scheduling[0]['MilestoneName'] = "Milestone One"; //Subtask List Scheduling[0]['SubTask'] = []; Scheduling[0]['SubTask'][0] = {}; Scheduling[0]['SubTask'][0]['SubTaskName'] = "SubTask One"; Scheduling[0]['SubTask'][0]['CompletionPercent'] = "50"; Scheduling[0]['SubTask'][1] = {}; Scheduling[0]['SubTask'][1]['SubTaskName'] = "SubTask Two"; Scheduling[0]['SubTask'][1]['CompletionPercent'] = "80"; console.log(Scheduling); 

You're never instantiating the object you want to assign MilestoneName to, only it's parent. 您永远都不会实例化您要为其分配MilestoneName的对象,只有它是父对象。

You could, for example, try this: 例如,您可以尝试以下操作:

 var Scheduling = new Array(); // You're only using numbers as indexes, use an array! //first Milestone Scheduling.push({ MilestoneName: "Milestone One", SubTask: [ { SubTaskName: "SubTask One", CompletionPercent: 50, }, { SubTaskName: "SubTask Two", CompletionPercent: 80, }, ] }); Scheduling.push({ MilestoneName: "Milestone Two", SubTask: [ { SubTaskName: "SubTask One", CompletionPercent: 20, }, { SubTaskName: "SubTask Two", CompletionPercent: 15, }, ] }); console.log('Object: %o, String: %s', Scheduling, JSON.stringify(Scheduling)) 

You can also construct nested objects like this: 您也可以像这样构造嵌套对象:

var Scheduling = {};

//first Milestone
Scheduling[0] = {
    'MilestoneName': "Milestone One",
    'SubTask': {
        0: {
            'SubTaskName': "SubTask One",
            'CompletionPercent': "20"
        },
        1: {
            // and so on ...
        }
    }
};

I would also recomend to use arrays instead, wherever you deal with incremental index: 无论您在哪里处理增量索引,我都建议改用数组:

var Scheduling = []; // array instead

//first Milestone
Scheduling[0] = {
    // .. like before
    'SubTask': [  //here also an array
        { 
            // task one
        },
        {
            // task two
        }
    ],

This is my final code 这是我的最终代码

 var Scheduling = new Object();

//first Milestone
Scheduling[0] = {};
Scheduling[0]['MilestoneName'] = "Milestone One";
//Subtask List
Scheduling[0]['SubTask'] = {};
Scheduling[0]['SubTask'][0] = {};
Scheduling[0]['SubTask'][0]['SubTaskName'] = "SubTask One";
Scheduling[0]['SubTask'][0]['CompletionPercent'] = "50";

Scheduling[0]['SubTask'][1] = {};
Scheduling[0]['SubTask'][1]['SubTaskName'] = "SubTask Two";
Scheduling[0]['SubTask'][1]['CompletionPercent'] = "80";

//Second Milestone
Scheduling[1] = {};
Scheduling[1]['MilestoneName'] = "Milestone One";
//Subtask List
Scheduling[1]['SubTask'] = {};
Scheduling[1]['SubTask'][0] = {};
Scheduling[1]['SubTask'][0]['SubTaskName'] = "SubTask One";
Scheduling[1]['SubTask'][0]['CompletionPercent'] = "50";

Scheduling[1]['SubTask'][1] = {};
Scheduling[1]['SubTask'][1]['SubTaskName'] = "SubTask Two";
Scheduling[1]['SubTask'][1]['CompletionPercent'] = "80";

alert(JSON.stringify(Scheduling));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM