Search code examples
javascriptarraysnode.jsjsonjavascript-objects

How to compare 2 objects in JavaScript and return difference


I have 2 objects and i want to compare old with new and return the new one if values of object differs. I tryed multiple solutions and it seems i can't achieve this. here is what i've tryed

  var new_pkg ={scooter_id:"TM0060",lat:"45.747646",lng:"21.231496",alt:"99.200"};
    var old_pkg={scooter_id:"TM0060",lat:"25.747746",lng:"31.221496",alt:"100.200"};
    function difference(new_pkg, old_pkg) {
        function changes(new_pkg, old_pkg) {
            return _.transform(new_pkg, function(result, value, key) {


        if (!_.isEqual(value, old_pkg[key])) {
                result[key] = (_.isObject(value) && _.isObject(old_pkg[key])) ? changes(value, old_pkg[key]) : value;
            }
        });
    }
    return changes(new_pkg, old_pkg);
}

i want to return {lat:"45.747646",lng:"21.231496",alt:"99.200"};


Solution

  • You can compare object values by key and return difference object if there is difference:

    var new_pkg ={scooter_id:"TM0060",lat:"45.747646",lng:"21.231496",alt:"99.200"};
    var old_pkg={scooter_id:"TM0060",lat:"25.747746",lng:"31.221496",alt:"100.200"};
    
    const getNew = (newObj, oldObj) => {
        if (Object.keys(oldObj).length == 0 
            && Object.keys(newObj).length > 0)
            return newObj;
    
        let diff = {};
        for (const key in oldObj) {
            if (newObj[key] && oldObj[key] != newObj[key] ) {
                diff[key] = newObj[key]; 
            }
        }
    
        if (Object.keys(diff).length > 0) 
            return diff;
        
        return oldObj;
    }
    
    console.log(getNew(new_pkg, old_pkg));