Search code examples
javascriptarraysjavascript-objects

How to dynamically add an array to an object?


What I am trying to achieve

I am trying to dynamically add an array to an object. That is, starting with

 {colour: "white", type: "electric"};

and ending with

{colour: "white", type: "electric", owners: ["person1", "person2", "person3"] };

Consider the following object below

let car = {colour: "white", type: "electric"};

If I want to add another property to this object, I can check if it exist. Then add to it as follows.

if( typeof car.status === "undefined")
    car.status = "sold";

What i have tried

Using the above logic I tried the following

let car = {
  colour: "white",
  type: "electric"
};

if (typeof car.owners === "undefined")
  car.owners.push("person1");

but this doesn't work.

The question

How do I add an array to an object?


Solution

  • To add an array to an object, you create the array and assign it to a property:

    let car = {
      colour: "white",
      type: "electric"
    };
    
    if (typeof car.owners === "undefined") {
      //           vvvvvvvvvvv----- creates the array
      car.owners = ["person1"];
      // ^^^^^^^^^--- assigns it to the property
    }
    
    console.log(car);

    If you want to add to that array later, you can use push. But the array has to exist first. E.g., something like:

    // `person` has the person to add...
    if (typeof car.owners === "undefined") {
      car.owners = [person];
    } else {
      car.owners.push(person);
    }
    

    That said, it's best to avoid changing the shape of objects unnecessarily. I'd just start with an empty array and do away with the if:

    let car = {
      colour: "white",
      type: "electric",
      owners: [] // <=== Empty array
    };
    
    car.owners.push("person1");
    
    console.log(car);