Created
February 12, 2019 02:37
-
-
Save stevenbeales/bf776060136ff5bc29e899c4b0bc2653 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const flattenObject = (obj, prefix = '') => | |
Object.keys(obj).reduce((acc, k) => { | |
const pre = prefix.length ? prefix + '.' : ''; | |
if (typeof obj[k] === 'object') Object.assign(acc, flattenObject(obj[k], pre + k)); | |
else acc[pre + k] = obj[k]; | |
return acc; | |
}, {}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
flattenObject({ a: { b: { c: 1 } }, d: 1 }); // { 'a.b.c': 1, d: 1 } | |
Flatten an object with the paths for keys. | |
Use recursion. Use Object.keys(obj) combined with Array.prototype.reduce() to convert every leaf node to a flattened path node. If the value of a key is an object, the function calls itself with the appropriate prefix to create the path using Object.assign(). Otherwise, it adds the appropriate prefixed key-value pair to the accumulator object. You should always omit the second argument, prefix, unless you want every key to have a prefix. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment