Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const isValidObject = obj => typeof obj === 'object' && obj;
- const xorFlags = (first, second) => !(first && second) && (first || second);
- const arrayHasDifferece = (origin, override) => JSON.stringify(origin) === JSON.stringify(override);
- const differentTypes = (origin, override) => typeof origin !== typeof override
- || xorFlags(Array.isArray(origin), Array.isArray(override));
- const objectDiff = (origin, override) => {
- if (!isValidObject(origin) || !isValidObject(override)) {
- return override;
- }
- const diff = {};
- const overrideKeys = Object.keys(override);
- overrideKeys.forEach((key) => {
- if (origin[key] === override[key]) {
- return;
- }
- if (differentTypes(origin[key], override[key])) {
- diff[key] = override[key];
- return;
- }
- if (Array.isArray(origin[key]) && Array.isArray(override[key])) {
- if (arrayHasDifferece(origin[key], override[key])) {
- diff[key] = override[key];
- }
- return;
- }
- if (typeof origin[key] === 'object' && typeof override[key] === 'object') {
- const diffProperty = objectDiff(origin[key], override[key]);
- if (diffProperty) {
- diff[key] = diffProperty;
- }
- return;
- }
- if (origin[key] !== override[key]) {
- diff[key] = override[key];
- }
- });
- const diffKeys = Object.keys(diff);
- if (diffKeys.length) {
- return diff;
- }
- };
- module.exports = objectDiff;
Add Comment
Please, Sign In to add comment