JSFiddle - React, Tailwind, and code Playground

by webholik

JavaScript

function isSame(obj1, obj2, prefer){
    // Optional parameter prefer allows to only check for object keys and not both keys and values of an object
    var obj_prefer = prefer || "both"; 
    function checkArray(arr1, arr2){
        for(var i = 0, j = obj1.length; i<j; i++){
            if(obj1[i] !== obj2[i]){return false;}
        }
        return true;
    }
    
    function checkValues(obj_1, obj_2){
        for(var prop in obj_1){
            if(typeof obj_1[prop] === "function"){  // converting functions to string so that they can be matched
                obj_1[prop] = String(obj_1[prop]);
                obj_2[prop] = String(obj_2[prop]);
            }
            
            if(obj_1[prop] !== obj_2[prop]){ return false;}
        }
        return true;
    }
    // The built in === will check everything except when typeof object is "object"
    if ( typeof obj1 === "object"){
        // typeof Array is object so this is an alternative
        if((typeof obj1.push === "function") && (!obj1.hasOwnProperty('push'))){
            return checkArray(obj1, obj2);
            }

        else{
                if( obj_prefer !== "keys"){   // do not check for values if obj_prefer is "keys"
                    return checkValues(obj1, obj2);
                }
                var keys_1 = Object.keys(obj1);
                var keys_2 = Object.keys(obj2);
                if(!checkArray(keys_1, keys_2)){return false;}

                return true;
        }
    }
            
        if( typeof obj1 === "undefined" && typeof obj2 === "undefined" ){return true}

        if(typeof obj1 === "function"){
            return String(obj1) === String(obj2);
        }

            return obj1 === obj2;
}
        
console.log(isSame(2, 2));
console.log(isSame([1], [1]));
console.log(isSame({name:'Komal'}, {name:'Komal'}));
console.log(isSame(undefined, undefined));
console.log(isSame([], []));
console.log(isSame({}, {}));
console.log(isSame({name:'kol'}, {name:'Amit'},...