Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.25 KB | None | 0 0
  1. 'use strict';
  2.  
  3. function evolve(evolveObject) {
  4. return function curriedEvolve(objectToEvolve, handlers = evolveObject) {
  5. const result = {};
  6. for (let key of Object.keys(objectToEvolve)) {
  7. if (!Array.isArray(objectToEvolve[key]) && typeof objectToEvolve[key] === 'object') {
  8. result[key] = curriedEvolve(objectToEvolve[key], handlers[key]);
  9. } else {
  10. result[key] = handlers[key] ? handlers[key](objectToEvolve[key]) : objectToEvolve[key];
  11. }
  12. }
  13. return result;
  14. }
  15. }
  16.  
  17. const evolver = evolve({
  18. hello: value => `Hello, ${value}!`,
  19. toggle: value => !value,
  20. count: value => value + 1,
  21. unexistingProp: () => 'I won\'t be called',
  22. nested: {
  23. doubleArray: value => [...value, ...value],
  24. },
  25. });
  26.  
  27. const result = evolver({
  28. hello: 'Frontend Raccoon', // -> Hello, Frontend Raccoon!
  29. toggle: false, // -> true
  30. count: 0, // -> 1
  31. nested: {
  32. doubleArray: [1, 2, 3], // -> [1, 2, 3, 1, 2, 3]
  33. dontTouchThis: true, // -> не изменяется, так как не обозначено в evolve
  34. }
  35. });
  36.  
  37. const expectedResult = {
  38. hello: 'Hello, Frontend Raccoon!',
  39. toggle: true,
  40. count: 1,
  41. nested: {
  42. doubleArray: [1, 2, 3, 1, 2, 3],
  43. dontTouchThis: true,
  44. }
  45. };
  46.  
  47. console.log(_.isEqual(result, expectedResult));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement