Skip to content Skip to sidebar Skip to footer

How To Set Specific Property Value Of All Objects In A Javascript Object Array (lodash)

I have following object array: var arr = [ { id : 'a1', guid : 'sdfsfd', ... value : 'abc', status: 'active' }, { id : 'a2', guid : 'sdfs

Solution 1:

You don't need lodash for this.


The first object is missing your status property and it will be added.

SHOWING THREE WAYS HOW YOU CAN DO IT

IMMUTABLE VERSION (We create a new array using map)

const arrImmutableVersion = arr.map(e => ({...e, status: "active"}));

MUTABLE VERSIONS (We change the original array)

arr.forEach((el)=>{el.status = "active";}) 

or

arr.forEach(function(el){el.status = "active";}) 

var arr = [
  {
    id    : "a1",
    guid  : "sdfsfd",   
    value : "abc"
  },
  {
    id    : "a2",
    guid  : "sdfsfd",   
    value : "def",
    status: "inactive"
  },
  {
    id    : "a2",
    guid  : "sdfsfd",   
    value : "def",
    status: "active"
  } 
];

// SHOWING THREE WAYS HOW YOU CAN DO IT// MUTABLE VERSIONS - We change the original array
arr.forEach((el)=>{el.status = "active";}) // ES6// or
arr.forEach(function(el){el.status = "active";}) 
//or// IMMUTABLE VERSION - We create a new array using `map`const arrImmutableVersion = arr.map(e => ({...e, status: "active"})); // ES6//--------------------------------------------------------------// RESULTS:console.log("logging results of object 'arr'");
console.log(arr);
console.log("---------------------------------------------------------");
console.log("logging results of object 'arrImmutableVersion'");
console.log(arrImmutableVersion);

Solution 2:

Indeed, you don't needLodash, but the question is tagged Lodash, and using Lodash offers some useful defenses that reduces the risk of errors. This solution utilizes _.forEach and _.set

// _.forEach won't throw errors if arr is not an array...
 _.forEach(arr, function (obj) {
    // _.set won't throw errors if obj is not an object. With more complex objects, if a portion of the path doesn't exist, _.set creates it
     _.set(obj, 'status', 'active');
 });

If you wanted to make it abstract, you could build a Lodash mixin:

_.mixin({
    setProperty: function(arr, key, val) {
        _.forEach(arr, function(obj) {
            _.set(obj, path, val);
        });
    }
});

Then, you could use it exactly as you described:

_.setProperty( arr, 'status', 'active' );

Solution 3:

A way simpler and and cleaner way !

If you want to use func programming in a proper manner

  myArray = myArray.map(arrayElem => {
    arrayElem.property = newValue
    return arrayElem
  })

Post a Comment for "How To Set Specific Property Value Of All Objects In A Javascript Object Array (lodash)"