简体   繁体   中英

How to access immediate parent record from child record in loop?

Below is my JSON:

var records = 
[
  {
    "name": "Node-1",
    "nodes": [
      {
        "name": "Node-1-1",
         "parentName" : null,
        "nodes": [
          {
            "name": "Node-1-1-1",
            "parentName" : null,
            "nodes": []
          }
        ]
      }
    ]
  }
];

Now I want that each child record to have its parent name in parentName property.

For example: parentName for Node-1-1 should be Node-1 because Node-1 is parent of Node-1-1

But here I am not getting that how would I will know that Node-1 is parent of Node-1-1 and how I would access Node-1 value when I am reading Node-1-1 record?

Expected output:

[
  {
    "name": "Node-1",
    "nodes": [
      {
        "name": "Node-1-1",
         "parentName" : "Node-1",
        "nodes": [
          {
            "name": "Node-1-1-1",
            "parentName" : "Node-1-1",
            "nodes": []
          }
        ]
      }
    ]
  }
];

 var records = [ { "name": "Node-1", "nodes": [ { "name": "Node-1-1", "parentName" : null, "nodes": [ { "name": "Node-1-1-1", "parentName" : null, "nodes": [] } ] } ] } ]; Iterate(records); function Iterate(nodes) { nodes.forEach(function (node) { if (node.nodes) { Iterate(node.nodes); } }); } 

You could pass in the parent as another parameter to the Iterate method.

 var records = [{ "name": "Node-1", "nodes": [{ "name": "Node-1-1", "parentName": null, "nodes": [{ "name": "Node-1-1-1", "parentName": null, "nodes": [] }] }] }]; Iterate(records); function Iterate(nodes, parent) { nodes.forEach(function(node) { if (parent) { node.parentName = parent.name; } if (node.nodes) { Iterate(node.nodes, node); } }); } console.log(records); 

Just pass the parentName as parameter of the Iterate function.

 var records = [ { "name": "Node-1", "nodes": [ { "name": "Node-1-1", "parentName" : null, "nodes": [ { "name": "Node-1-1-1", "parentName" : null, "nodes": [] } ] } ] } ]; Iterate(records); console.log(records); function Iterate(nodes, parentName) { nodes.forEach(node => { if (parentName) { node.parentName = parentName; } if (node.nodes) { Iterate(node.nodes, node.name); } }); } 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM