Guest User

Untitled

a guest
Jul 21st, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.30 KB | None | 0 0
  1. const isValidObject = obj => typeof obj === 'object' && obj;
  2. const xorFlags = (first, second) => !(first && second) && (first || second);
  3. const arrayHasDifferece = (origin, override) => JSON.stringify(origin) === JSON.stringify(override);
  4. const differentTypes = (origin, override) => typeof origin !== typeof override
  5. || xorFlags(Array.isArray(origin), Array.isArray(override));
  6. const objectDiff = (origin, override) => {
  7. if (!isValidObject(origin) || !isValidObject(override)) {
  8. return override;
  9. }
  10. const diff = {};
  11. const overrideKeys = Object.keys(override);
  12. overrideKeys.forEach((key) => {
  13. if (origin[key] === override[key]) {
  14. return;
  15. }
  16. if (differentTypes(origin[key], override[key])) {
  17. diff[key] = override[key];
  18. return;
  19. }
  20. if (Array.isArray(origin[key]) && Array.isArray(override[key])) {
  21. if (arrayHasDifferece(origin[key], override[key])) {
  22. diff[key] = override[key];
  23. }
  24. return;
  25. }
  26. if (typeof origin[key] === 'object' && typeof override[key] === 'object') {
  27. const diffProperty = objectDiff(origin[key], override[key]);
  28. if (diffProperty) {
  29. diff[key] = diffProperty;
  30. }
  31. return;
  32. }
  33. if (origin[key] !== override[key]) {
  34. diff[key] = override[key];
  35. }
  36. });
  37. const diffKeys = Object.keys(diff);
  38. if (diffKeys.length) {
  39. return diff;
  40. }
  41. };
  42. module.exports = objectDiff;
Add Comment
Please, Sign In to add comment