Deep Merge Two Hashes (JavaScript) with Answer
Deep Merge Two Hashes (JavaScript)
by dshilkret
HTML
<p>
Write a method deepMerge(a, b) that takes in 2 hashes and merges all the properties including nested objects and concatenates any array fields:
</p>
<pre></pre>
JavaScript
var a = {"__metadata":{"type":"SP.Data.Data_x0020_SourcesItem"}}
var b = {
"SNowID2" : "INC0000001",
email : "[email protected]",
school : { name: "CS College" },
grades : [ 95, 80 ]
}
// deepMerge(a, b) should equal:
var result = {
"SNowID2" : "INC0000001",
"Title" : "Incident 1"
}
function deepMerge(a,b) {
var result = clone(a);
for(var key in b) {
if (!result.hasOwnProperty(key)) {
result[key] = b[key];
} else if (result[key].constructor === Array && b[key].constructor === Array ) {
result[key] = result[key].concat(b[key]);
} else if(typeof(result[key]) == 'object' && typeof(b[key]) == 'object') {
result[key] = deepMerge(result[key], b[key]);
} else {
result[key] = b[key];
}
}
return result;
}
function clone(obj) {
var result = obj.constructor();
for(var key in obj) {
result[key] = obj[key];
}
return result;
}
var result = deepMerge(a,b);
console.log(a);
console.log(result);
$('pre').html(JSON.stringify(result));