How to define an empty javascript object with the following struture so that I can dynamically insert data into it?

StackOverflow https://stackoverflow.com/questions/11618394

  •  22-06-2021
  •  | 
  •  

Question

I am using JIT Infovis stacked or mono-valued piechart to do some data visualization. The stacked pie chart takes an object "obj" specifically with the following structure:

This is the hard coded version of jsonObj:

  var obj = {
        // labelID is unique in each case and may be multiple or just one
        'labelID': ['pVal'],
        'values': [{ //labelName is unique in each case and will only be one
            'labelName': 'name1',
            //there may be multiple or just one "values"
            //ex, 'values': [80, 40, 15, 10]
            'values': 80
        }, {
            'labelName': 'name2',
            'values': [20]
        }, {
            'labelName': 'name3',
            'values': [38]
        }, {
            'labelName': 'name4',
            'values': [58]
        }]
    };

I'm trying to dynamically populate "obj" with searched data returned to user. But I can not create an empty "obj" with the above specific structure to dynamically populate the data. I tried several times but don't think I'm creating them correctly. I have three values that I'm trying to dynamically populate into this "obj" but can't get my arms around it. chartID[m], chartArrName[m], chartVal[m].

I need a correct empty "obj" that correspond to the structure defined above.

 var "obj" = {
        label: ['pVal'],
        values: [{
            label: [],
            values: []
        }]
    };
    for (m = 0; m <= chartArrID.length - 1; m++) {
        obj.values[m].label += chartArrName[m];
        obj.values[m].values += parseFloat(chartArrVal[m]);
        //json.push({label: chartArrName[m], values: parseFloat(chartArrVal[m])});
    }
Was it helpful?

Solution

This is not a JSON object. JSON is a lightweight data interchange format. You are just using a object initializer syntax to create an object. You can add what you want of the fly.

var myObj = {};
myObj.name = "foo";
myObj.books = [ "one", "two" ];
myObj.emptyField = null;
myObj.emptyArray = [];
myObj["anotherField"] = "bar";   // this works too

myObj.anotherArray = [];

myObj.anotherArray[0] = {};  // you need to insert something in the first position!
myObj.anotherArray[0].label = "aaa";
myObj.anotherArray[0].value = "bbb";
myObj.anotherArray[0].xyz = "ccc";

myObj.anotherArray[1] = {};  // in the second too, of course!
myObj.anotherArray[1].label = "ddd";
myObj.anotherArray[1].value = "eee";
myObj.anotherArray[1].xyz = "fff";
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top