Skip to content

Instantly share code, notes, and snippets.

@svlasov-gists
Forked from padolsey/gist:272905
Created April 14, 2012 11:31
Show Gist options
  • Star 18 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save svlasov-gists/2383751 to your computer and use it in GitHub Desktop.
Save svlasov-gists/2383751 to your computer and use it in GitHub Desktop.
JavaScript: merge two objects
function merge(target, source) {
/* Merges two (or more) objects,
giving the last one precedence */
if ( typeof target !== 'object' ) {
target = {};
}
for (var property in source) {
if ( source.hasOwnProperty(property) ) {
var sourceProperty = source[ property ];
if ( typeof sourceProperty === 'object' ) {
target[ property ] = util.merge( target[ property ], sourceProperty );
continue;
}
target[ property ] = sourceProperty;
}
}
for (var a = 2, l = arguments.length; a < l; a++) {
merge(target, arguments[a]);
}
return target;
};
@solio
Copy link

solio commented Oct 16, 2014

how is the util.merge defined

@dixso
Copy link

dixso commented Feb 18, 2015

Remove "util."

@aepedraza
Copy link

Thanks a lot, very useful

@petvas
Copy link

petvas commented Aug 25, 2015

line 17 util.merge

@noreliq
Copy link

noreliq commented Sep 25, 2015

great function. one comment: this also merges arrays, which may or may not be the desired behaviour.

you may want to include a check in if ( typeof sourceProperty === 'object' ) to make sure the object is also not an array.

@EvgenNechyporuk
Copy link

EvgenNechyporuk commented Jun 18, 2016

console.log(typeof null); - > "object"
console.log(typeof [1,2]); - > "object"
check only type enough

@JohnTheBeloved
Copy link

Thanks, really Helped

@rsxdalv
Copy link

rsxdalv commented Aug 3, 2017

function merge(target: { [x: string]: {} }, source: { [x: string]: {} }) {

    /* Merges two (or more) objects,
       giving the last one precedence */

    if (typeof target !== "object") {
        target = {};
    }

    for (const property in source) {

        if (source.hasOwnProperty(property)) {

            const sourceProperty = source[property];

            if (typeof sourceProperty === "object" &&
                // tslint:disable-next-line:no-null-keyword
                sourceProperty !== null &&
                sourceProperty.constructor !== Array
            ) {
                target[property] = merge(target[property], sourceProperty);
                continue;
            }

            target[property] = sourceProperty;

        }

    }

    // tslint:disable-next-line:one-variable-per-declaration
    for (let a = 2, l = arguments.length; a < l; a++) {
        merge(target, arguments[a]);
    }

    return target;
}

// {} Ensures that there cannot be only 1 argument
merge({}, {}, ...sourceFixture);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment