Open In App

How to check two objects have same data using JavaScript ?

In JavaScript, we cannot directly compare two objects by equality operators (double equals == or triple equals ===) to see whether they are equal or not. Comparing two objects like this results in false even if they have the same data. It is because those are two different object instances, they are referring to two different objects.



There is no direct method in javascript to check whether two objects have the same data or not.

Below is the pseudo-code of the function, followed by the code snippet:



Pseudo Code:

function hasSameData
    if both objects have the same number of keys (properties)
        if every key of obj1 matches with the corresponding key 
        of obj2 and values of the same keys of both objects match.
            return true
    return false

Approach:

Example:




<script>
    const obj1 = {
        name: 'Ram',
        age: 21
    };
  
    const obj2 = {
        name: 'Ram',
        age: 21
    };
  
    const haveSameData = function (obj1, obj2) {
        const obj1Length = Object.keys(obj1).length;
        const obj2Length = Object.keys(obj2).length;
  
        if (obj1Length === obj2Length) {
            return Object.keys(obj1).every(
                key => obj2.hasOwnProperty(key)
                    && obj2[key] === obj1[key]);
        }
        return false;
    }
    document.write(haveSameData(obj1, obj2));
</script>

Output:

true

Note: The above approach does not work for nested objects (Objects and arrays inside an
object). In such cases, it needs function according to the nested object.

Applying the above function would fail in case of nested objects as shown below: 
 




<script>
    const obj1 = {
        name: 'Ram',
        age: 21,
        hobbies: ['Cricket', 'Swimming']
    };
  
    const obj2 = {
        name: 'Ram',
        age: 21,
        hobbies: ['Cricket', 'Swimming']
    };
    const haveSameData = function(obj1, obj2) {
        const obj1Length = Object.keys(obj1).length;
        const obj2Length = Object.keys(obj2).length;
  
        if(obj1Length === obj2Length) {
            return Object.keys(obj1).every(
                key => obj2.hasOwnProperty(key)
                   && obj2[key] === obj1[key]);
        }
        return false;
    }
    document.write(haveSameData(obj1, obj2));
</script>

Output:

false

Article Tags :