MegaMatt
MegaMatt

Reputation: 23753

Add JavaScript object to JavaScript object

I'd like to have JavaScript objects within another JavaScript object as such:

Issues:

  - {"ID" : "1", "Name" : "Missing Documentation", "Notes" : "Issue1 Notes"}
  - {"ID" : "2", "Name" : "Software Bug", "Notes" : "Issue2 Notes, blah, blah"}
  - {"ID" : "2", "Name" : "System Not Ready", "Notes" : "Issue3 Notes, etc"}
  // etc...

So, I'd like "Issues" to hold each of these JavaScript objects, so that I can just say Issues[0].Name, or Issues[2].ID, etc.

I've created the outer Issues JavaScript object:

var jsonIssues = {};

I'm to the point where I need to add a JavaScript object to it, but don't know how. I'd like to be able to say:

Issues<code here>.Name = "Missing Documentation";
Issues<code here>.ID = "1";
Issues<code here>.Notes = "Notes, notes notes";

Is there any way to do this? Thanks.

UPDATE: Per answers given, declared an array, and am pushing JavaScript objects on as needed:

var jsonArray_Issues = new Array();

jsonArray_Issues.push( { "ID" : id, "Name" : name, "Notes" : notes } );

Thanks for the responses.

Upvotes: 56

Views: 253650

Answers (7)

If you have properties in first obj and you have to add your objs to it, then Object.assign() will erase it.

To avoid this loss I've written a function below. Be aware, it copies nested objs by refference.

First you should add all objs you want to add to your's obj to an arr. You can do it easily by arr.push(). Then just use the Fn.

function addMyObjs (objInit, arrWithObjs) {
    let map = new Map();
    for (let [key, value] of Object.entries(objInit)) {
        map.set(key, value);
    }
    arrWithObjs.forEach((item) => {
        for (let [key, value] of Object.entries(item)) {
            map.set(key, value);
        }
    });
    return Object.fromEntries(map);
}

let objSecond = {id: 2,};

let obj = {
    name: "Tolya",
    age: 33,
    sex: "man",
};

let obj3 = {"fruits": {"apples": true, "plums": false,}};

let arr = [obj, obj3];

objSecond = addMyObjs(objSecond, arr);

Upvotes: 0

Striker
Striker

Reputation: 331

jsonIssues = [...jsonIssues,{ID:'3',Name:'name 3',Notes:'NOTES 3'}]

Upvotes: 1

Alex
Alex

Reputation: 643

As my first object is a native JavaScript object (used like a list of objects), push didn't work in my scenario, but I resolved it by adding new key as follows:

MyObjList['newKey'] = obj;

In addition to this, may be useful to know how to delete the same object as inserted before:

delete MyObjList['newKey'][id];

Hope it helps someone as it helped me.

Upvotes: 41

Scoreby
Scoreby

Reputation: 99

If it's not an array of object you can do this:

let student= {
  name : 'Mr. Anderson',
  id: 35
}

student['grade'] = 10; //for a property. 

Result:

student= {
  name : 'Mr. Anderson',
  id: 35,
  grade:10
}

You also can add an object:

let student= {
 personalData:{
  //personal data key-value
 }
}

let academicData = {
 //academic data key-value
}

student['academicData'] = academicData;

Result:

 student{
        personalData{},
        academicData{}
    }

Upvotes: 4

Eden
Eden

Reputation: 107

// Merge object2 into object1, recursively

$.extend( true, object1, object2 );

// Merge object2 into object1

$.extend( object1, object2 );

https://api.jquery.com/jquery.extend/

Upvotes: 6

jldupont
jldupont

Reputation: 96716

var jsonIssues = []; // new Array
jsonIssues.push( { ID:1, "Name":"whatever" } );
// "push" some more here

Upvotes: 63

Zoidberg
Zoidberg

Reputation: 10323

var jsonIssues = [
 {ID:'1',Name:'Some name',Notes:'NOTES'},
 {ID:'2',Name:'Some name 2',Notes:'NOTES 2'}
];

If you want to add to the array then you can do this

jsonIssues[jsonIssues.length] = {ID:'3',Name:'Some name 3',Notes:'NOTES 3'};

Or you can use the push technique that the other guy posted, which is also good.

Upvotes: 9

Related Questions