Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'use strict';
- function evolve(evolveObject) {
- return function curriedEvolve(objectToEvolve, handlers = evolveObject) {
- const result = {};
- for (let key of Object.keys(objectToEvolve)) {
- if (!Array.isArray(objectToEvolve[key]) && typeof objectToEvolve[key] === 'object') {
- result[key] = curriedEvolve(objectToEvolve[key], handlers[key]);
- } else {
- result[key] = handlers[key] ? handlers[key](objectToEvolve[key]) : objectToEvolve[key];
- }
- }
- return result;
- }
- }
- const evolver = evolve({
- hello: value => `Hello, ${value}!`,
- toggle: value => !value,
- count: value => value + 1,
- unexistingProp: () => 'I won\'t be called',
- nested: {
- doubleArray: value => [...value, ...value],
- },
- });
- const result = evolver({
- hello: 'Frontend Raccoon', // -> Hello, Frontend Raccoon!
- toggle: false, // -> true
- count: 0, // -> 1
- nested: {
- doubleArray: [1, 2, 3], // -> [1, 2, 3, 1, 2, 3]
- dontTouchThis: true, // -> не изменяется, так как не обозначено в evolve
- }
- });
- const expectedResult = {
- hello: 'Hello, Frontend Raccoon!',
- toggle: true,
- count: 1,
- nested: {
- doubleArray: [1, 2, 3, 1, 2, 3],
- dontTouchThis: true,
- }
- };
- console.log(_.isEqual(result, expectedResult));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement