Add multiple attributes to an existing js object

前端 未结 6 1014
不知归路
不知归路 2020-12-31 01:50

I want to add multiple attributes to an existing object with existing attributes. Is there a more concise way than one line per new attribute?

myObject.name         


        
相关标签:
6条回答
  • 2020-12-31 01:56

    I'm not sure if that's helpful, but there is a trick using JS ES6 spread syntax:

    let obj = {a: 1, b: 2};
    obj = {...obj, b: 3, c: 4};
    console.log(obj); // {a: 1, b: 3, c: 4}
    

    You can try to use this somehow... In general, that's a single liner to add or override object properties using js destructuring method.

    Edit: Notice that the placement of ...obj in the new object is cruicial, as placing it first would allow overriding it with the following params (b: 3, c: 4 in my example), and placing it last will give priority to the members that are already in the object.

    0 讨论(0)
  • 2020-12-31 01:58

    Use jQuery library

    jQuery.extend(myObject, { name : 'don', gender : 'male' });
    
    0 讨论(0)
  • 2020-12-31 02:02

    From How can I merge properties of two JavaScript objects dynamically?

    var obj2 = {name: 'don', gender: 'male'};
    for (var attrname in myobject) { myobject[attrname] = obj2[attrname]; }
    

    EDIT

    To be a bit clearer about how you could extend Object to use this function:

    //Extend the protype so you can make calls on the instance
    Object.prototype.merge = function(obj2) {
        for (var attrname in obj2) {
            this[attrname] = obj2[attrname];
        }
        //Returning this is optional and certainly up to your implementation.  
        //It allows for nice method chaining.
        return this;
    };
    //Append to the object constructor function so you can only make static calls
    Object.merge2 = function(obj1, obj2) {
        for (var attrname in obj2) {
            obj1[attrname] = obj2[attrname];
        }
        //Returning obj1 is optional and certainly up to your implementation
        return obj1;
    };
    

    Usage:

    var myObject1 = { One: "One" };
    myObject1.merge({ Two: "Two" }).merge({ Three: "Three" });
    //myObject1 is { One: "One", Two: "Two", Three: "Three", merge: function }
    
    
    var myObject2 = Object.merge2({ One: "One" }, { Two: "Two" });
    Object.merge2(myObject2, { Three: "Three" });
    //myObject2 is { One: "One", Two: "Two", Three: "Three" }
    

    Note: You certainly could implement a flexible merge conflict strategy depending on your needs.

    0 讨论(0)
  • 2020-12-31 02:10

    In ES6/ ES2015 you can use the Object.assign method

    let obj = {key1: true};
    console.log('old obj: ', obj);
    let newObj = {key2: false, key3: false};
    
    Object.assign(obj, newObj);
    console.log('modified obj: ', obj);

    0 讨论(0)
  • 2020-12-31 02:15

    In ECMAscript 5 you can make us of defineProperties:

    Object.defineProperties(myobject, {  
      name: {  
        value: 'don' 
      },  
      gender: {  
        value: 'male' 
      }  
    });
    
    0 讨论(0)
  • 2020-12-31 02:16

    Sometimes I do it like this:

    var props = {
       name : 'don',
       gender : 'male',
       age : 12,
       other : false
    };
    for(var p in props) myObject[p] = props[p];
    
    0 讨论(0)
提交回复
热议问题