How to merge objects?

后端 未结 3 1530
一整个雨季
一整个雨季 2020-12-29 19:05

For instance, from these two objects :

var object1 = {
  \"color\": \"yellow\",
  \"size\": null,
  \"age\": 7,
  \"weight\": null
}

var object2 = {
  \"col         


        
相关标签:
3条回答
  • 2020-12-29 19:26

    For newer versions (at least 1.4.0) of angular you can use angular.merge

    Unlike extend(), merge() recursively descends into object properties of source objects, performing a deep copy.

    0 讨论(0)
  • 2020-12-29 19:28

    Copy

    var src = { name: 'Apple', price: 5};
    var dst= angular.copy(src);
    
    • deep copy

    Extend:

    var mergedObject = angular.extend(dst, src1, src2, ...) 
    
    • shallow copy

    Merge:

    var mergedObject = angular.merge(dst, src);
    
    • since angular 1.4+
    • deep (recursively) copy

    If you want to not overwrite with null, you can use this.


    Object.assign():

    let movie2 = Object.assign({}, movie1, { episode: 8 });
    
    • fot Angular 2+ (ECMAScript 6)

    Sources:

    • https://docs.angularjs.org/api/ng/function

    • http://davidcai.github.io/blog/posts/copy-vs-extend-vs-merge/

    0 讨论(0)
  • 2020-12-29 19:45

    Using angualr.extend will not produce the result requested. The object2.age null value will override object1.age value.

    angular.extend(object1, object2) will produce the following result:

    {
        "color" : "blue", 
        "size" : 51, 
        "age" : null,   <=== undesirable result
        "weight" : null
    }
    

    Use the following code to skip over null properties

    for (var prop in object1) {
        if(object1.hasOwnProperty(prop) && object2.hasOwnProperty(prop) && object2[prop]!=null) {
            object1[prop] = object2[prop];
        }
    }
    

    This will produce the following requested result

    {
        "color" : "blue", 
        "size" : 51, 
        "age" : 7, 
        "weight" : null
    }
    
    0 讨论(0)
提交回复
热议问题