Skip to content

Instantly share code, notes, and snippets.

@yiyizym
Last active February 5, 2020 07:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yiyizym/9e9484a4a9494e3e712f6223b6419d4f to your computer and use it in GitHub Desktop.
Save yiyizym/9e9484a4a9494e3e712f6223b6419d4f to your computer and use it in GitHub Desktop.
deep_merge
'use strict';
function deepMerge(){
let args = [].slice.call(arguments);
let target = args.shift();
let sources = args;
if(sources.length == 0){
return target;
}
else {
let source = sources.shift();
for(let key in source){
if(!source.hasOwnProperty(key)){
continue;
}
if(typeof source[key] == 'object'){
if(!target.hasOwnProperty(key)){
target[key] = {}
}
deepMerge(target[key],source[key]);
}
else {
target[key] = source[key];
}
}
sources.unshift(target)
return deepMerge.apply(null,sources);
}
}
let a = {'a': {'c':3},'d':4}
let b = {'a': {'d':4}}
let c = deepMerge({},a, b);
console.log(c)
@zymiboxpay
Copy link

'use strict';

function deepMerge(){
  let args = [].slice.call(arguments);
  let target = args.shift();
  let sources = args;
  if(sources.length == 0){
    return target;
  }
  else {
    let source = sources.shift();
    for(let key in source){
      if(!source.hasOwnProperty(key)){
        continue;
      }
      if(typeof source[key] == 'object'){
        if(!target.hasOwnProperty(key)){
          target[key] = {}
        }
        deepMerge(target[key],source[key]);
      }
      else {
        target[key] = source[key];
      }
    }
    sources.unshift(target)
    return deepMerge.apply(null,sources);
  }
}

let a = {'a': {'c':3},'d':4}
let b = {'a': {'d':4}}

let c = deepMerge({},a, b);
console.log(c)

@js2me
Copy link

js2me commented Feb 5, 2020

if(typeof source[key] == 'object')

also need to check on null because typeof null === "object"

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