我有一个包含moduleId和parentId的JSON数据,我想要一个带有模块父子映射结构的新JSON。
** parentId可以为null,表示该模块没有父级。
[{
"moduleId": 1,
"parentId": null
},
{
"moduleId": 2,
"parentId": 1
},
{
"moduleId": 3,
"parentId": 1
},
{
"moduleId": 4,
"parentId": null
},
{
"moduleId": 5,
"parentId": null
},
{
"moduleId": 6,
"parentId": 3
}
]
[{
"moduleId": 1,
"child": [{
"moduleId": 2,
"child": []
},
{
"moduleId": 3,
"child":[{
"moduleId": 6,
"child": []
}]
}]
},
{
"moduleId": 4,
"child": []
},
{
"moduleId": 5,
"child": []
}
]
问题 - 儿童内部的孩子没有被映射
function tree($list)
{
$map = new stdClass();
$roots = [];$node = [];
for($i=0; $i<sizeof($list); $i++)
{
$c=$list[$i]["moduleId"];
$map->$c = $i;
$list[$i]["children"] = []; // initialize the children
}
for($i=0; $i<sizeof($list); $i++)
{
$node = $list[$i];
if( $node["parentId"] !== "" )
{
$m = $node["parentId"];
$val = $map->$m;
$child = new StdClass;
$child->moduleId = $node["moduleId"];
$child->parentId = $node["parentId"];
$child->children = [];
array_push($list[$val]["children"],$node);
}
}
for($i = 0;$i<sizeof($list);$i++)
{
if($list[$i]["parentId"] == "")
{
array_push($roots, $list[$i]);
}
}
return json_encode($roots);
}
我无法弄明白。这里的所有答案都给出了不同的结果。 可以使用任何语言(java,C,php,js,python等)。三江源。
答案 0 :(得分:1)
var arry = [{
"parentId": null,
"moduleId": 1
},
{
"parentId": 1,
"moduleId": 2
},
{
"parentId": 1,
"moduleId": 3
},
{
"parentId": null,
"moduleId": 4
},
{
"parentId": null,
"moduleId": 5
},
{
"parentId": 3,
"moduleId": 6
}
];
function convert(array){
var map = {};
for(var i = 0; i < array.length; i++){
var obj = array[i];
obj.children= [];
map[obj.moduleId] = obj;
var parent = obj.parentId || '-';
if(!map[parent]){
map[parent] = {
children: []
};
}
map[parent].children.push(obj);
}
return map['-'].children;
}
var r = convert(arry)
console.log('array', r);
console.log('result', JSON.stringify(r))