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.

Comparing 2 objects with equality operator results false

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:

  • We will find keys of both objects by Object.keys(), which returns an array of keys of that object.
  • For checking that every key in obj1 is also present in obj2, and if values of those key matches, we will use every() method. The every() method accepts a callback and returns “true” or “false” according to the callback condition.

Example:

javascript

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


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: 
 

javascript

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output:

false

full-stack-img




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : prerak_jain