2014-09-12 165 views
-3

我需要改变以下平板JavaScript对象数组:如何将平面JavaScript对象数组转换为嵌套层次JSON结构?

[ [ { "name": "child1" }, { "name": "parent1" }, { "name": "grandparent1" } ], [ { "name": "child2" }, { "name": "parent2" }, { "name": "grandparent2" } ] ] 

分为以下几个层次的嵌套JSON结构:

{ 
    "data": [ 
     { 
      "name": "child1", 
      "parent": { 
       "name": "parent1", 
       "parent": { 
        "name": "grandparent1", 
        "parent": null 
       } 
      } 
     }, 
     { 
      "name": "child2", 
      "parent": { 
       "name": "parent2", 
       "parent": { 
        "name": "grandparent2", 
        "parent": null 
       } 
      } 
     } 
    ] 
} 

我怎么能在JavaScript做到这一点?

+1

通过编写代码并向我们展示您首先尝试过的内容。你可以用简单的循环和/或像'reduce'(或其他)这样的数组原型方法轻松地完成它。 – Ian 2014-09-12 13:33:00

+0

如果数组的模式总是相同的,那么它不是很复杂 – T00rk 2014-09-12 13:35:00

+1

究竟是什么'{child1,parent1,grandparent1} '?请以正确的JSON形式发布输入,就像您对预期输出所做的一样。 – Bergi 2014-09-12 13:35:28

回答

1

好吧,

我想出了下面的解决方案,似乎工作正常。

var familiesArr = [ [ { "name": "child1" }, { "name": "parent1" }, { "name": "grandparent1" } ], [ { "name": "child2" }, { "name": "parent2" }, { "name": "grandparent2" } ] ]; 
var hierarchicalFamilies = createHierarchicalFamilies(familiesArr); 

function createHierarchicalFamilies(familiesArr) { 
    var familyHierarchy = new Array();   
    for (var i=0; i<familiesArr.length; i++) { 
     var family = familiesArr[i]; 
     familyHierarchy.push(addFamilyMember(family.slice())); 
    } 
    return familyHierarchy; 
} 

function addFamilyMember(family) { 
    if (family.length <= 0) { 
     return null; 
    } 
    var familyMemberNode = family[0]; 
    var familyMember = new Object(); 
    familyMember.name = familyMemberNode.name; 
    familyMember.parent = addFamilyMember(family.slice(1)); 
    return familyMember; 
}   
相关问题