UNPKG

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