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...