compare two objects
get difference between two objects, script #2
by slawe
JavaScript
function diff(obj1, obj2, exclude) {
var r = {};
if(!exclude) {
exclude = [];
}
for (var prop in obj1) {
if (obj1.hasOwnProperty(prop) && prop != '__proto__') {
if (exclude.indexOf(obj1[prop]) == -1) {
// check if obj2 has prop
if (!obj2.hasOwnProperty(prop)) {
r[prop] = obj1[prop];
}
// check if prop is object and
// NOT a JavaScript engine object (i.e. __proto__),
// if so, recursive diff
else if (obj1[prop] === Object(obj1[prop])) {
var difference = diff(obj1[prop], obj2[prop]);
if (Object.keys(difference).length > 0) {
r[prop] = difference;
}
}
// check if obj1 and obj2 are equal
else if (obj1[prop] !== obj2[prop]) {
if (obj1[prop] === undefined) {
r[prop] = 'undefined';
}
if (obj1[prop] === null) {
r[prop] = null;
}
else if (typeof obj1[prop] === 'function') {
r[prop] = 'function';
}
else if (typeof obj1[prop] === 'object') {
r[prop] = 'object';
}
else {
r[prop] = obj1[prop];
}
}
}
}
}
return r;
}
var one = {"taskId":null,"score":[300,900],"vehicleYear":[2000,2016],"odometer":[0,170000],"includeOdometerNull":true,"includeEscoreNull":false,"insertDateBegin":"11/24/2016","insertDateEnd":"02/24/2017","mailedDateBegin":null,"mailedDateEnd":null,"originalDateBegin":null,"originalDateEnd":null,"datasources":[1,29],"agebuckets":[],"states":["NY","LA","WA","DC"],"makes":[{"name":"Bmw","openLeft":true,"openRight":true,"models":["325 Ci","325 I","328 I","328 Xi","535 I","X3 2.5i","X3 Xdrive35i","Z4...