Here’s a handy way to determine if two JavaScript objects are identical without using a framework like jQuery or MooTools:
var compare_objects = function (obj1, obj2){
var parameter_name;
var compare = function(objA, objB, param){
var param_objA = objA[param],
param_objB = (typeof objB[param] === "undefined") ? false : objB[param];
switch(typeof objA[param]){
case "object": return (compare_objects(param_objA, param_objB));
case "function": return (param_objA.toString() === param_objB.toString());
default: return (param_objA === param_objB);
}
};
for(parameter_name in obj1){
if(typeof obj2[parameter_name] === "undefined" || !compare(obj1, obj2, parameter_name)){
return false;
}
}
for(parameter_name in obj2){
if(typeof obj1[parameter_name] === "undefined" || !compare(obj1, obj2, parameter_name)){
return false;
}
}
return true;
};
Code language: JavaScript (javascript)
Here’s an easy way to clone a JavaScript object:
var clone_object = function (original_obj) {
var new_obj = {};
for(var param in original_obj) {
if(original_obj.hasOwnProperty(param)){
if(typeof(original_obj[param]) === "object"){
new_obj[param] = clone_object(original_obj[param]);
} else {
new_obj[param] = original_obj[param];
}
}
}
return new_obj;
};
Code language: JavaScript (javascript)
A real-world example of the two functions:
var object_1 = { fruit: "apple", tree: "dogwood", number: 3 };
var object_2 = { fruit: "apple", tree: "dogwood", number: 3, cartoons: { anime: "robotech", fantasy: "he-man" } };
var object_3 = clone_object(object_2);
console.log("objects 1 and 2 match? " +compare_objects(object_1, object_2));
//displays false;
console.log("objects 2 and 3 match? " +compare_objects(object_2, object_3));
//displays true
Code language: JavaScript (javascript)
Bear in mind both of these functions are recursive, which means the larger the object, the slower the performance.