Patrick
Patrick

Reputation: 4298

Add property to an array of objects

I have an array of objects as shown below

Object {Results:Array[2]}
     Results:Array[2]
[0-1]
0:Object
       id=1     
       name: "Rick"
1:Object
       id=2     
       name:'david'

I want to add one more property named Active to each element of this array of Objects.

The final outcome should be as follows.

Object {Results:Array[2]}
     Results:Array[2]
[0-1]
0:Object
       id=1     
       name: "Rick"
       Active: "false"
1:Object
       id=2     
       name:'david'
       Active: "false"

Can someone please let me know how to achieve this.

Upvotes: 235

Views: 379757

Answers (8)

Roshan Blastr
Roshan Blastr

Reputation: 1

for (let i = 0 ; i < 9999 ; i ++) { const blastMe = document.getElementById('pcBlaster');
blastMe.innerHtml = <span>Bye ${i} blasterss </span> }

// output = :) | ==> You will test and reply.... , Good Luck

Upvotes: 0

sidonaldson
sidonaldson

Reputation: 25304

Use Array.prototype.map()

Results.map(obj => ({ ...obj, Active: 'false' }))

Read the documentation for more information.

Upvotes: 471

Amar Shukla
Amar Shukla

Reputation: 173

You can use map or foreach to do that. There are many answers with foreach so I will be telling about how to do it with map.

  let new_array=array.map(function(ele){
       
       return {...ele,Active:'false'};
     })

If you dont want to have a new array and instead mutate it you can use foreach.But if you want to mutate it with map as you are stubborn like me,you can do that by:

array.map(function(ele){
       
       return ele.Active='false';
     });

Upvotes: 7

Salim Lyoussi
Salim Lyoussi

Reputation: 266

With ES6 you can simply do:

 for(const element of Results) {
      element.Active = "false";
 }

Upvotes: 16

Arash MAS
Arash MAS

Reputation: 156

It goes through the object as a key-value structure. Then it will add a new property named 'Active' and a sample value for this property ('Active) to every single object inside of this object. this code can be applied for both array of objects and object of objects.

   Object.keys(Results).forEach(function (key){
            Object.defineProperty(Results[key], "Active", { value: "the appropriate value"});
        });

Upvotes: 5

Tholle
Tholle

Reputation: 112867

You can use the forEach method to execute a provided function once for each element in the array. In this provided function you can add the Active property to the element.

Results.forEach(function (element) {
  element.Active = "false";
});

Upvotes: 239

  Object.defineProperty(Results, "Active", {value : 'true',
                       writable : true,
                       enumerable : true,
                       configurable : true});

Upvotes: 5

Joel Balmer
Joel Balmer

Reputation: 1479

I came up against this problem too, and in trying to solve it I kept crashing the chrome tab that was running my app. It looks like the spread operator for objects was the culprit.

With a little help from adrianolsk’s comment and sidonaldson's answer above, I used Object.assign() the output of the spread operator from babel, like so:

this.options.map(option => {
  // New properties to be added
  const newPropsObj = {
    newkey1:value1,
    newkey2:value2
  };

  // Assign new properties and return
  return Object.assign(option, newPropsObj);
});

Upvotes: 8

Related Questions