diff --git a/functional-tools.js b/functional-tools.js index 8b13789..e79ab64 100644 --- a/functional-tools.js +++ b/functional-tools.js @@ -1 +1,29 @@ +/** + * Returns a JSON with an updated value + * @param {string} key + * @param {string} newValue + * @param {JSON} json + * @returns {JSON} + * + * Example + * const person = {name: 'James', age: 20, pets: ['dog', 'cat']}; + * updateJSON('name', 'maria', person); + * // {"age": 20, "name": "maria", "pets": ["dog", "cat"]} + * + * Others: "modify" in Ramda + */ +function updateJSON(key, newValue, json) { + // JSON to Array + return Object.entries(json).map( + function (row) { + // Replace value + return row[0] == key ? row.slice(0, 1).concat(newValue) : row + } + ).reduce( + function (jsonUpdate, valueUpdate) { + // Array to JSON + jsonUpdate[valueUpdate[0]] = valueUpdate[1]; + return jsonUpdate; + }, {}); +}