我有一个路径(作为字符串),如
A / B / C / d
。 我想将它表示为JSON对象,如下所示:
{
A:{
B:{
C:D
}
}
}
现在让我说我添加一个路径
A / B / C / X
然后JSON应该看起来像
{
A:{
B:{
C:[D,X]
}
}
}
所以我所做的就是当我获得路径时,我将其拆分并存储在数组中,如下所示
var struct = {};
var path = $scope.path.split("/"); //assuming $scope.path holds the path
for(var i =0;i<path.length-1;i++)
{
struct[path[i]] = path[i+1];
}
然而,这导致json为{A: "B", B: "C", C: "D"}
。
我该如何解决?是否有递归方式来做到这一点?
编辑:我之前的架构会导致错误。正如KevinB建议的那样,我正在将模式更新为[{name:&#39; A&#39;,children:[{name:&#39; B&#39;,children:[]}]}]
答案 0 :(得分:1)
是的,请看一下为此创建的这个功能(顺便说一句,我是作者):
https://github.com/DiegoZoracKy/make-object-path
代码是:
var makeObjectPath = function(_src, _path, _val) {
var src = _src,
path = _path,
val = _val;
if (arguments[0] instanceof Array || typeof(arguments[0]) == 'string') {
src = {};
path = arguments[0];
val = arguments[1] || null;
}
path = (typeof(path) == 'string') ? path.split('.') : path;
var o = src;
var currentO = o;
for (var i in path) {
currentO[path[i]] = (i != path.length - 1) ? currentO[path[i]] || {} : (val) ? val : {};
currentO = currentO[path[i]];
}
return o;
}
使用它:
makeObjectPath('root.parent.child', 'someValue');
// Output:
{
"root":{
"parent":{
"child":"someValue"
}
}
}