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
var typeOf = function(o) {
return Object.prototype.toString
.call(o).match(/(\w+)\]/)[1].toLowerCase();
};
var fromPath = function(obj, path) {
path = path.replace(/\[(\w+)\]/g, '.$1');
path = path.replace(/^\./, '');
var a = path.split('.');
//console.log(obj,path);
while (a.length) {
var n = a.shift();
if (obj && n in obj)
obj = obj[n];
else
return;
}
return obj;
};
var toPath = function(obj, path, value) {
if (typeOf(path) == "string")
var path = path.replace(/\[(\w+)\]/g, '.$1').replace(/^\./, '').split('.');
if (path.length > 1) {
var p = path.shift();
if (obj[p] == null) {
if (p.test(/^\d$/) || (path.length > 0 && path[0].test(/^\d$/))) {
obj[p] = [];
} else if (!p.test(/^\d$/) && typeOf(obj[p]) != 'object') {
obj[p] = {};
}
}
toPath(obj[p], path, value);
} else {
var p = path.shift();
if (p.test(/^\d$/) || typeOf(obj[p]) == "array") {
if (!obj[p] && typeOf(value) == "array") obj[p] = value;
else if (!obj[p] && typeOf(value) == "string") obj[p] = [value];
else obj[p] = value;
} else {
obj[p] = value;
}
}
};