Arun Prasad E S
Arun Prasad E S

Reputation: 10125

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.

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

enter image description here

Upvotes: 0

Views: 93

Answers (4)

Berry M.
Berry M.

Reputation: 489

You're never instantiating the object you want to assign MilestoneName to, only it's parent.

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

Upvotes: 1

Arun Prasad E S
Arun Prasad E S

Reputation: 10125

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

Upvotes: 0

Fabian
Fabian

Reputation: 480

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
        }
    ],

Upvotes: 0

Hasan
Hasan

Reputation: 2552

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

Upvotes: 1

Related Questions