JSFiddle - React, Tailwind, and code Playground

by francisfortier

JavaScript

var group1 = {
    id: 123,
    users: [
       {id: 234, name: "John"},
       {id: 345, name: "Mike"}
    ]
};

var group2 = {
    id: 123,
    users: [
       {id: 345, name: "Mike"},
       {id: 234, name: "John"}
    ]
};

function equal(a, b) {
    
    if (typeof a !== typeof b) return false;
    if (a.constructor !== b.constructor) return false;
    
    if (a instanceof Array)
    {
        return arrayEqual(a, b);
    }
    
    if(typeof a === "object")
    {
        return objectEqual(a, b);
    }
    
    return a === b;
}

function objectEqual(a, b) {
    for (var x in a)
    {
         if (a.hasOwnProperty(x))
         {
             if (!b.hasOwnProperty(x))
             {
                 return false;
             }
             
             if (!equal(a[x], b[x]))
             {
                 return false;
             }
         }
    }
    
    for (var x in b)
    {
        if (b.hasOwnProperty(x) && !a.hasOwnProperty(x))
        {
            return false;
        }
    }
    
    return true;
}

function arrayEqual(a, b) {
    if (a.length !== b.length)
    {
        return false;
    }
    
    var i = a.length;
    
    while (i--)
    {
        var j = b.length;
        var found = false;
        
        while (!found && j--)
        {
            if (equal(a[i], b[j])) found = true;
        }
        
        if (!found)
        {
            return false;
        }
    }
    
    return true;
}

alert(equal(group1, group2))