Something like jQuery.extend() but standalone?

前端 未结 3 645
不思量自难忘°
不思量自难忘° 2020-12-07 00:48

I\'m looking for a way to merge two configuration objects together, something like:

var developmentConfig = {
  url: \"localhost\",
  port: 80
};

var produc         


        
3条回答
  •  失恋的感觉
    2020-12-07 01:13

    This solution creates a new object and is able to handle multiple objects.

    Furthermore, it is recursive and you can chose weather you want to overwrite Values and Objects.

        function extendObjects() {
    
            var newObject        = {};
            var overwriteValues  = false;
            var overwriteObjects = false;
    
            for ( var indexArgument = 0; indexArgument < arguments.length; indexArgument++ ) {
    
                if ( typeof arguments[indexArgument] !== 'object' ) {
    
                    if ( arguments[indexArgument] == 'overwriteValues_True' ) {
    
                        overwriteValues = true;            
                    } else if ( arguments[indexArgument] == 'overwriteValues_False' ) {
    
                        overwriteValues = false;                             
                    } else if ( arguments[indexArgument] == 'overwriteObjects_True' ) {
    
                        overwriteObjects = true;     
                    } else if ( arguments[indexArgument] == 'overwriteObjects_False' ) {
    
                        overwriteObjects = false; 
                    }
    
                } else {
    
                    extendObject( arguments[indexArgument], newObject, overwriteValues, overwriteObjects );
                }
    
            }
    
            function extendObject( object, extendedObject, overwriteValues, overwriteObjects ) {
    
                for ( var indexObject in object ) {
    
                    if ( typeof object[indexObject] === 'object' ) {
    
                        if ( typeof extendedObject[indexObject] === "undefined" || overwriteObjects ) {
                            extendedObject[indexObject] = object[indexObject];
                        }
    
                        extendObject( object[indexObject], extendedObject[indexObject], overwriteValues, overwriteObjects );
    
                    } else {
    
                        if ( typeof extendedObject[indexObject] === "undefined" || overwriteValues ) {
                            extendedObject[indexObject] = object[indexObject];
                        }
    
                    }
    
                }     
    
                return extendedObject;
    
            }
    
            return newObject;
        }
    
        var object1           = { a : 1, b : 2, testArr : [888, { innArr : 1 }, 777 ], data : { e : 12, c : { lol : 1 }, rofl : { O : 3 } } };
        var object2           = { a : 6, b : 9, data : { a : 17, b : 18, e : 13, rofl : { O : 99, copter : { mao : 1 } } }, hexa : { tetra : 66 } };
        var object3           = { f : 13, g : 666, a : 333, data : { c : { xD : 45 } }, testArr : [888, { innArr : 3 }, 555 ]  };
    
        var newExtendedObject = extendObjects( 'overwriteValues_False', 'overwriteObjects_False', object1, object2, object3 );
    

    Contents of newExtendedObject:

    {"a":1,"b":2,"testArr":[888,{"innArr":1},777],"data":{"e":12,"c":{"lol":1,"xD":45},"rofl":{"O":3,"copter":{"mao":1}},"a":17,"b":18},"hexa":{"tetra":66},"f":13,"g":666}
    

    Fiddle: http://jsfiddle.net/o0gb2umb/

提交回复
热议问题