-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathexample.js
64 lines (57 loc) · 1.96 KB
/
example.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
const stringify = require('./');
const setValue = require('set-value');
const unstringify = obj => {
let result = {};
for (let key of Object.keys(obj)) {
setValue(result, key, obj[key]);
}
let walk = (target, parent) => {
if (typeOf(target) !== 'object') {
return target;
}
let keys = Object.keys(target);
if (keys.every((k, i) => +k === i)) {
return Object.values(target).map(v => walk(v));
}
for (let key of keys) {
target[key] = walk(target[key]);
}
return target;
};
return walk(result);
};
function typeOf(value) {
if (value === null) return 'null';
if (value === void 0) return 'undefined';
if (Array.isArray(value)) return 'array';
return typeof value;
}
let obj1 = { a: 'a', b: { c: { d: { e: 'f' } } } };
console.log(stringify(obj1));
//=> [ 'a', 'b.c.d.e' ]
console.log(stringify(obj1, { values: true }));
//=> { a: 'a', 'b.c.d.e': 'f' }
console.log(unstringify(stringify(obj1, { values: true })));
let obj2 = { 'a.b.c': { d: 'e' } };
console.log(stringify(obj2));
//=> [ 'a\\.b\\.c.d' ]
console.log(stringify(obj2, { values: true }));
//=> { 'a\\.b\\.c.d': 'e' }
console.log(unstringify(stringify(obj2, { values: true })));
let obj3 = { 'a.b.c': { d: 'e' } };
console.log(stringify(obj3, { separator: '/' }));
//=> [ 'a.b.c/d' ]
console.log(stringify(obj3, { separator: '/', values: true }));
//=> { 'a.b.c/d': 'e' }
let obj4 = { 'a.b.c': { d: 'e' } };
console.log(stringify(obj4, { escape: str => str.split('.').join('/') }));
//=> [ 'a/b/c.d' ]
console.log(stringify(obj4, { escape: str => str.split('.').join('/'), values: true }));
//=> { 'a/b/c.d': 'e' }
let obj5 = { a: 'a', b: [{ c: { d: 'e' } }, { f: { g: 'h' } }] };
console.log(stringify(obj5));
//=> [ 'a', 'b.0.c.d', 'b.1.f.g' ]
console.log(stringify(obj5, { values: true }));
//=> { a: 'a', 'b.0.c.d': 'e', 'b.1.f.g': 'h' }
console.log(unstringify(stringify(obj5, { values: true })));
//=> { a: 'a', b: [{ c: { d: 'e' } }, { f: { g: 'h' } }] };