/
flatten.js
77 lines (70 loc) · 1.68 KB
/
flatten.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
"use strict";
var CopyCat = CopyCat || {};
// CommonJS
if ('undefined' !== typeof module && 'undefined' !== typeof exports) {
module.exports = CopyCat;
}
(function () {
var fsomething,
fliteral,
farray,
fobject;
function typeOf(value) {
var s = typeof value;
if (s === 'object') {
if (value) {
if (typeof value.length === 'number' &&
!(value.propertyIsEnumerable('length')) &&
typeof value.splice === 'function') {
s = 'array';
}
} else {
s = 'null';
}
}
return s;
} // Thanks to Crockford
fsomething = function (key, val) {
switch(typeOf(val)) {
case "object":
return fobject(key, val);
break;
case "array":
return farray(key, val);
break;
default:
return fliteral(key, val);
}
}
fliteral = function (key, val) {
var o = {};
o[key] = val.toString();
return o;
};
farray = function (key, arr) {
var o = {};
o[key] = "[]";
arr.forEach(function (val, i) {
var nobj = fsomething("[" + i + "]", val);
Object.keys(nobj).forEach(function (nkey) {
o[key + nkey] = nobj[nkey];
});
});
return o;
}
fobject = function (skey, obj) {
var o = {};
o[skey] = "{}";
Object.keys(obj).forEach(function (key) {
var nobj = fsomething('.' + key, obj[key]);
Object.keys(nobj).forEach(function (nkey) {
o[skey + nkey] = nobj[nkey];
});
});
return o;
}
CopyCat.flatten = fsomething;
CopyCat.flatten.test = function () {
console.log(JSON.stringify(fsomething("obj", {str:"stringy",num:1,arr:[1,2,[4,5,6]]}), null, ' '));
}
}());