diff --git a/src/transformStateWithClones.js b/src/transformStateWithClones.js index 96d4f7e7e..e5db2f6da 100644 --- a/src/transformStateWithClones.js +++ b/src/transformStateWithClones.js @@ -7,7 +7,41 @@ * @return {Object[]} */ function transformStateWithClones(state, actions) { - // write code here + const resultedArray = []; + + for (const action of actions) { + const type = action.type; + const lastChangedObject = resultedArray.at(-1) || state; + let resultObject = Object.assign({}, lastChangedObject); + + switch (type) { + case 'addProperties': { + Object.assign(resultObject, action.extraData); + break; + } + + case 'removeProperties': { + removeProperties(action, resultObject); + break; + } + case 'clear': + resultObject = {}; + break; + + default: + throw new Error(`Unknown action type: ${type}`); + } + + resultedArray.push(resultObject); + } + + return resultedArray; } module.exports = transformStateWithClones; + +function removeProperties(action, resultObject) { + action.keysToRemove.forEach((key) => { + delete resultObject[key]; + }); +}