如何将平面JavaScript对象数组转换为嵌套层次JSON结构?
问题描述:
我需要改变以下平板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做到这一点?
答
好吧,
我想出了下面的解决方案,似乎工作正常。
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;
}
通过编写代码并向我们展示您首先尝试过的内容。你可以用简单的循环和/或像'reduce'(或其他)这样的数组原型方法轻松地完成它。 – Ian 2014-09-12 13:33:00
如果数组的模式总是相同的,那么它不是很复杂 – T00rk 2014-09-12 13:35:00
究竟是什么'{child1,parent1,grandparent1} '?请以正确的JSON形式发布输入,就像您对预期输出所做的一样。 – Bergi 2014-09-12 13:35:28