UNPKG

1.06 kBJavaScriptView Raw
1var forOwn = require('./forOwn');
2var isPlainObject = require('../lang/isPlainObject');
3
4 /*
5 * Helper function to flatten to a destination object.
6 * Used to remove the need to create intermediate objects while flattening.
7 */
8 function flattenTo(obj, result, prefix, level) {
9 forOwn(obj, function (value, key) {
10 var nestedPrefix = prefix ? prefix + '.' + key : key;
11
12 if (level !== 0 && isPlainObject(value)) {
13 flattenTo(value, result, nestedPrefix, level - 1);
14 } else {
15 result[nestedPrefix] = value;
16 }
17 });
18
19 return result;
20 }
21
22 /**
23 * Recursively flattens an object.
24 * A new object containing all the elements is returned.
25 * If level is specified, it will only flatten up to that level.
26 */
27 function flatten(obj, level) {
28 if (obj == null) {
29 return {};
30 }
31
32 level = level == null ? -1 : level;
33 return flattenTo(obj, {}, '', level);
34 }
35
36 module.exports = flatten;
37
38