Javascript 如何从数组中形成嵌套的JSON对象?

Javascript 如何从数组中形成嵌套的JSON对象?,javascript,arrays,json,algorithm,recursion,Javascript,Arrays,Json,Algorithm,Recursion,我有一个路径(作为字符串)如下 A/B/C/D 。 我想将其表示为JSON对象,如下所示: { A:{ B:{ C:D } } } 现在让我们假设我添加了一条路径 A/B/C/X 那么JSON应该是这样的 { A:{ B:{ C:[D,X] } } } 所以我要做的是,当我得到路径时,我将其拆分并存储在一个数组中,如下所示 var struct = {}; var path = $sc

我有一个路径(作为字符串)如下

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];
    }
var struct={};
var path=$scope.path.split(“/”)//假设$scope.path持有该路径

对于(var i=0;iYes),请查看为该函数创建的函数(顺便说一句,我是作者):

代码是:

    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"
        }
    }
}

一个对象中不能有两个相同的键,因此在
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:[]}]}]
,但是如果我有多个值,比如child或parent,这个函数将无法处理它。我需要创建一个目录结构