Как добавить дочерний элемент к вложенному дочернему элементу с помощью Node js? - PullRequest
0 голосов
/ 25 июня 2019
we have a JSON array where we have been able to add a child to "East" but we need to add a child to "Ho" under "Air" .

JSON array is like this



[{  
          "name":"External Customer",
          "id":4,
          "parentId":0,
          "is_open":true,
          "children":[  

             {  
                "name":"East",
                "id":20,
                "parentId":4,
                "is_open":true,
                "children":[  
                   {  
                      "name":"O",
                      "id":21,
                      "parentId":20,
                      "is_open":true,
                      "children":[  
                         {  
                            "name":"Ho",
                            "id":22,
                            "parentId":21,
                            "is_open":true,
                            "children":[  
                               {  
                                  "name":"Air",
                                  "id":23,
                                  "parentId":22,
                                  "is_open":true
                               }
                            ]
                         }
                      ]
                      {  
                      "name":"grandchild three",
                      "id":113,
                      "children":[]
      ]}

мы попытались добавить "Grandchild three" через код ниже

for(var a = 0; a < data.length; a++) {
            for(var b = 0; b < data[a].children.length; b++) {
              console.log(data[a].children[b]);
                if(data[a].children[b].id == 18) {
                   data[a].children[b].children.push({
                        name: "grandchild three", 
                        id: 115, 
                        children: []
                    });

                    slSchema.tree=JSON.stringify(data);
                    slSchema.save(function (err) {
                         done(err, slSchema);
                       });
                }
            }
        }

Все, что нам нужно сделать, - это добавить новый дочерний элемент к последнему дочернему узлу, т.е. "Ho". Мы успешно добавили дочерний элемент к узлу "Восток". Как этого добиться с помощью node.js? Заранее спасибо за помощь.

1 Ответ

1 голос
/ 25 июня 2019

Вы можете использовать рекурсивный подход, чтобы найти правильный узел, например:

const data = [{  
    "name":"External Customer",
    "id":4,
    "parentId":0,
    "is_open":true,
    "children":[  

    {  
        "name":"East",
        "id":20,
        "parentId":4,
        "is_open":true,
        "children":[  
            {  
                "name":"O",
                "id":21,
                "parentId":20,
                "is_open":true,
                "children":[  
                {  
                    "name":"Ho",
                    "id":22,
                    "parentId":21,
                    "is_open":true,
                    "children":[  
                        {  
                            "name":"Air",
                            "id":23,
                            "parentId":22,
                            "is_open":true
                        }
                    ]
                }
                ]
            }
        ]
    }]
}];


function addChildToNode(data, nodeId, child) {
    if (!Array.isArray(data)) {
        return;
    }

    for(element of data) {
        if (element.id === nodeId && element.children) {
            element.children.push(child);
        } else {
            addChildToNode(element.children, nodeId, child);
        }
    }
}

// The node to add the child to..
let searchNodeId = 22;
let newChild = { name: "New Child", parentId: searchNodeId, id: 10 };

addChildToNode(data, searchNodeId, newChild);

console.log("Result: ", data);
...