【发布时间】:2015-08-02 05:34:15
【问题描述】:
我有一个路径(作为字符串),比如
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: 'A', children: [{name: 'B', children: []}]}]
【问题讨论】:
-
你不能在一个对象中有两个相同的键,所以你永远不会在
B对象中得到C: D和C: X,C需要转换为数组[D,X]或B为[{C:D},{C:X}]的数组 -
“有没有递归的方法来做到这一点?” 是的,遍历路径,在每次迭代中深入对象一层,直到完成整个小路。但是,首先您必须根据之前的评论提出一个实际有效的架构。
-
修正了我的差异问题。
-
您更新的架构,那么您将如何表示 /A/B/C/D/E?还是 /A/Z?
-
在想一个更规范的结构,比如
[{name: 'A', children: [{name: 'B', children: []}]}]
标签: javascript arrays json algorithm recursion