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.

Similar Posts