diff --git a/problems/js/differences-between-two-objects.js b/problems/js/differences-between-two-objects.js new file mode 100644 index 0000000..4515a10 --- /dev/null +++ b/problems/js/differences-between-two-objects.js @@ -0,0 +1,29 @@ +/** + * @param {object} obj1 + * @param {object} obj2 + * @return {object} + */ +function objDiff(obj1, obj2) { + if (obj1 === obj2) { + return {}; + } + + if ( + obj1 === null || obj2 === null + || typeof obj1 !== 'object' || typeof obj2 !== 'object' + || Array.isArray(obj1) !== Array.isArray(obj2) + ) { + return [obj1, obj2]; + } + + let result = {}; + for (let key in obj1) { + if (key in obj2) { + let diff = objDiff(obj1[key], obj2[key]); + if (Object.keys(diff).length) { + result[key] = diff; + } + } + } + return result; +};