How to set specific property value of all objects in a javascript object array (lodash)

后端 未结 3 1510
难免孤独
难免孤独 2020-12-16 15:58

I have following object array:

var arr = [
  {
    id    : \"a1\",
    guid  : \"sdfsfd\",
    ...
    value : \"abc\",
    status: \"active\"
  },
  {
             


        
相关标签:
3条回答
  • 2020-12-16 16:25

    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
      })
    
    0 讨论(0)
  • 2020-12-16 16:26

    Indeed, you don't need Lodash, 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' );
    
    0 讨论(0)
  • 2020-12-16 16:44

    You don't need lodash for this.

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

    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);

    0 讨论(0)
提交回复
热议问题