【问题标题】:Create Parent-Child tree JSON创建父子树 JSON
【发布时间】:2018-05-23 13:18:17
【问题描述】:

我有一个包含 moduleId 和 parentId 的 JSON 数据,我想要一个具有模块父子映射结构的新 JSON。

**parentId 可以为 null,表示模块没有父级。

当前 JSON-

[{
    "moduleId": 1,
    "parentId": null    
 },
 {
    "moduleId": 2,
    "parentId": 1   
 },
 {
    "moduleId": 3,
    "parentId": 1   
 },
 {
    "moduleId": 4,
    "parentId": null    
 },
 {
    "moduleId": 5,
    "parentId": null    
 },
 {
    "moduleId": 6,
    "parentId": 3   
 }
]

必需的 JSON-

[{
    "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等)。谢谢。

【问题讨论】:

  • 您的帖子缺少 Required code ,也称为 MCVE
  • @YvesLeBorg 我已经添加了我当前的代码。并且也给出了问题。请帮忙

标签: javascript java php python json


【解决方案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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    相关资源
    最近更新 更多