Created
June 21, 2020 07:47
-
-
Save Nitin-Daddikar/fa6a8b78c0ed3eb47d78112dcdf8e187 to your computer and use it in GitHub Desktop.
Building tree using parent and child flat JSON structure
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var flatJSON = [ | |
{ | |
name : "A", | |
parent : "root" | |
}, | |
{ | |
name : "B", | |
parent : "root" | |
}, | |
{ | |
name : "C", | |
parent: "A" | |
}, | |
{ | |
name : "D", | |
parent: "B" | |
}, | |
{ | |
name : "E", | |
parent: "C" | |
}, | |
{ | |
name : "F", | |
parent: "C" | |
} | |
] | |
/** Class representing a Node in a tree. */ | |
class Node { | |
constructor(nodeName, parentName) { | |
/** String of Node Name */ | |
this.name = nodeName; | |
/** String of Parent Name */ | |
this.parentName = parentName; | |
/** Array of Children. */ | |
this.children = []; | |
} | |
} | |
function buildTree() { | |
var tree = [], | |
mappedArr = {}, | |
arrElem, | |
mappedElem; | |
// First map the nodes of the array to an object -> create a hash table. | |
for (var i = 0, len = flatJSON.length; i < len; i++) { | |
arrElem = new Node(flatJSON[i].name, flatJSON[i].parent); | |
mappedArr[arrElem.name] = arrElem; | |
} | |
for (var name in mappedArr) { | |
if (mappedArr.hasOwnProperty(name)) { | |
mappedElem = mappedArr[name]; | |
// If the element is not at the root level, add it to its parentName array of children. | |
if (mappedElem.parentName !== "root") { | |
mappedArr[mappedElem['parentName']]['children'].push(mappedElem); | |
} else { // If the element is at the root level, add it to first level elements array. | |
tree.push(mappedElem); | |
} | |
} | |
} | |
console.log(tree); | |
} | |
buildTree(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment