UNPKG

1.18 kBJavaScriptView Raw
1export default function flatten(obj) {
2 var flattened = {}
3
4 var circlular = []
5 var circLoc = []
6
7 function _route(prefix, value) {
8 var i, len, type, keys, circularCheck, loc
9
10 if (value == null) {
11 if (prefix === "") {
12 return
13 }
14 flattened[prefix] = null
15 return
16 }
17 type = typeof value
18 if (typeof value == "object") {
19 circularCheck = circlular.indexOf(value)
20 if (circularCheck >= 0) {
21 loc = circLoc[circularCheck] || "this"
22 flattened[prefix] = "[Circular (" + loc + ")]"
23 return
24 }
25 circlular.push(value)
26 circLoc.push(prefix)
27
28 if (Array.isArray(value)) {
29 len = value.length
30 if (len == 0) _route(prefix + "[]", null)
31 for (i = 0; i < len; i++) {
32 _route(prefix + "[" + i + "]", value[i])
33 }
34 return
35 }
36 keys = Object.keys(value)
37 len = keys.length
38 if (prefix) prefix = prefix + "."
39 if (len == 0) _route(prefix, null)
40 for (i = 0; i < len; i++) {
41 _route(prefix + keys[i], value[keys[i]])
42 }
43 return
44 }
45 flattened[prefix] = value
46 }
47
48 _route("", obj)
49
50 return flattened
51}