Skip to content

Instantly share code, notes, and snippets.

@Nitin-Daddikar
Created June 21, 2020 07:47
Show Gist options
  • Save Nitin-Daddikar/fa6a8b78c0ed3eb47d78112dcdf8e187 to your computer and use it in GitHub Desktop.
Save Nitin-Daddikar/fa6a8b78c0ed3eb47d78112dcdf8e187 to your computer and use it in GitHub Desktop.
Building tree using parent and child flat JSON structure
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