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?
2 Answers 2
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);
Comments
If the status property exists in the object then u have to follow the below way
let car = {colour: "white", type: "electric",status:"somethings!"};
if(car.status){
car.status = "sold";
}
console.log(car)
// o/p { colour: 'white', type: 'electric', status: 'sold' }
If the status property does not exist in the object
let car = {colour: "white", type: "electric"};
if(car.status){
car.status = "sold";
}
console.log(car)
// o/p { colour: 'white', type: 'electric' }
If the Array property exists inside the object then you should follow the below sample code
let car = {colour: "white", type: "electric"};
if(car.owners && car.owners.length > 0){
// when the owners property exist and it's not an empty array
car.owners.push("person1");
} else {
// when the owners property does not exist or it's an empty array
car.owners = [];
car.owners.push("person2");
}
console.log(car)
// o/p { colour: 'white',type: 'electric',owners: [ 'person2' ] }
3 Comments
status was assigned to false initially in the object? wouldn't if(car.status){ car.status = "sold"; } not execute?Explore related questions
See similar questions with these tags.
car.owners = [](instead of using a non-existing one)