I want to create a graph or tree structure from raw JSON data from mongoDB. The data points are parent-children related. I tried to create some code to make a data structure and pretty print it, but it still has duplicated rows.
[
{
"_id": { "$oid": "577048a0a5f4970b59493861" },
"children": [
{ "$oid": "5914d7528ed1755954d6e88f" },
{ "$oid": "56675f1446e0324b4566f6e9" },
{ "$oid": "5924f500381e3b5854db8a0c" },
{ "$oid": "5cc64fadcf995a1d6b54e745" },
{ "$oid": "5d71b5f49a311e6fd587e3dc" },
{ "$oid": "599646b5bd0b9864d8e7391d" },
{ "$oid": "5850ae570b242ff1782ea07c" },
{ "$oid": "58e9a01f33d3f1f208e032de" },
{ "$oid": "5546db39dbeafcef63e6efb6" },
{ "$oid": "5fbdad479a311e6fd58812ff" },
{ "$oid": "5cabd38142524178c66be1f1" },
{ "$oid": "5491ddb3d707d710141027c2" },
{ "$oid": "5d66f0109a311e6fd587e12c" },
{ "$oid": "56ef0296a7b280e91b475aeb" },
{ "$oid": "5cd4dabce84cdd76faaf597f" },
{ "$oid": "58e43b26f79ce47642fae5c4" },
{ "$oid": "58252929332df05c01c1624f" },
{ "$oid": "55dfd7d2bb58034a69d563fe" },
{ "$oid": "56ef03976e418ae84779d827" },
{ "$oid": "5491dd8bd707d710141027c1" },
{ "$oid": "5ba2eb071e910a58acf98e3f" },
{ "$oid": "5cf580fb87823d36e74808bf" },
{ "$oid": "5dae373a3c6e806fd3bbb1fc" },
{ "$oid": "61c3a8bf3824dd48d99ab572" },
{ "$oid": "5a2f468069d12b0a0f4cc68e" },
{ "$oid": "5be8de44c052dc326ab1e810" },
{ "$oid": "5c98455267dcef531cbc44f6" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "5835f65457eea2852d2bf48c" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5924f500381e3b5854db8a0c" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "56ef03976e418ae84779d827" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "59c87107cdfaa27f5759b107" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5a24977405bdd758991bdb93" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "55aef43d03d4ad2343c2e27f" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "56d382a0589377c94614cbbc" },
"children": [
{ "$oid": "5cdb32901d30d576fe946d44" },
{ "$oid": "5a53e1ac23090e4877973532" },
{ "$oid": "613e86c24faf093afab2c0ea" },
{ "$oid": "62eb0a4456bdf04c7768843c" },
{ "$oid": "5a53ddb8159e7944e0b44795" },
{ "$oid": "606e58ad2f2af36f2219bcc8" },
{ "$oid": "628da1ce238868408a576c22" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "592776bc8ed1755954d6e8d5" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "594c8252381e3b5854db8af7" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "59503126381e3b5854db8afc" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "58e43b26f79ce47642fae5c4" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "59644a45442b1e826dd7cdac" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5965a855b3e775836dfd8d5b" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "599646b5bd0b9864d8e7391d" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "59965edbf39ca264d9dd41ca" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "58ddc042f67c5f75420cc403" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5914d7528ed1755954d6e88f" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5a53e1ac23090e4877973532" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5aaf190e159e7944e0b44fe1" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5b15c4adee10e503a6a6d757" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "55c8024609c8cb2176ba55da" },
"children": [
{ "$oid": "581bbdfbf0df7f680817970b" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "5491dd7ed707d710141027c0" },
"children": [
{ "$oid": "5d54d4fc5937ee123ad60c9d" },
{ "$oid": "5cb7ef9281c9d71d6a82843f" },
{ "$oid": "5d59c4efa0e40d1239ec5e14" },
{ "$oid": "5cf707cde5dbb949ad5cc302" },
{ "$oid": "5d54bd25a0e40d1239ec5d9c" },
{ "$oid": "5c1a9ae870c07e201b3a4880" },
{ "$oid": "5c0ec151a9b73222dfdd82d6" },
{ "$oid": "5de70b4f9a311e6fd587f4e9" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "581bbdfbf0df7f680817970b" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5850ae570b242ff1782ea07c" },
"children": [
{ "$oid": "5cd4dabce84cdd76faaf597f" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "54fe27cf5c25b1394be6b303" },
"children": [
{ "$oid": "6241210f7210ae3af7727813" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "58252929332df05c01c1624f" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5b57b20e8fff7b28249879ae" },
"children": [
{ "$oid": "5d01cc1787e6383735ed12a6" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "5988de44d4978b0596152387" },
"children": [
{ "$oid": "5d06bcaaefa930373488e7c0" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "5ad6ca76159e7944e0b45553" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5b15e2dd5240347c64223fed" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "56675f1446e0324b4566f6e9" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5a0223cc285a000c2866565c" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5491dfa5d707d710141027cb" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5491ddb3d707d710141027c2" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "555560f0ab95c2765d65c3cd" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "55dfd7d2bb58034a69d563fe" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "55cd503216db9f1c385a69db" },
"children": [
{ "$oid": "5f4f019d0e170b6f23370b53" },
{ "$oid": "5a0223cc285a000c2866565c" },
{ "$oid": "5f6175683c6e806fd3bbcef7" },
{ "$oid": "6289c9d0adb2f54c79e239d4" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "5a8211ad159e7944e0b44b67" },
"children": [
{ "$oid": "5d82a7063c6e806fd3bbaa37" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "5491dd8bd707d710141027c1" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5771fda4d0c907f02785022a" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "57391e8ec1d461090ef7397d" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5a53ddb8159e7944e0b44795" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5af905d15240347c64223af3" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5b6cd1aff6056722483d49f2" },
"children": [
{ "$oid": "5d531e95ff66e07233a2bf76" },
{ "$oid": "5d5475e993b2f3707a737d40" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "5702f5161c852788280926f3" },
"children": [
{ "$oid": "5f0b9d810e170b6f2337073d" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "5a0dfc4894ba750156a47e9c" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "58e9a01f33d3f1f208e032de" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5a2472d6f6b76456d074f761" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5a2f468069d12b0a0f4cc68e" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5b4e5a958fff7b2824987846" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5546db39dbeafcef63e6efb6" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "56ef0296a7b280e91b475aeb" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "57ce00596dfb923915cf9a7f" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5a24b30df6b76456d074f7c4" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5ba2eb071e910a58acf98e3f" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5be8de44c052dc326ab1e810" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5be9cc9c20a38c39bc4c807b" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5be9d2553863d639bbface86" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5c075bd666a1c95d2acc6a3f" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5c083f19d011855d2b41d458" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5c0ec151a9b73222dfdd82d6" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5c1a9ae870c07e201b3a4880" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5c3bd69f70c07e201b3a4a99" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5c5cd18745f41e78ebfb0732" },
"children": [
{ "$oid": "5c5cd1a31279d46f7d90a186" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "5c5cd1a31279d46f7d90a186" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5c609d8686e12578ea359383" },
"children": [
{ "$oid": "5d531e95ff66e07233a2bf76" },
{ "$oid": "5b6cd1aff6056722483d49f2" },
{ "$oid": "5d5475e993b2f3707a737d40" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "5c64ccb086e12578ea359499" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5c85a3b56ce63b531de0eaef" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5c98455267dcef531cbc44f6" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5caabb5bc8bbd278c0392dab" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5cabd38142524178c66be1f1" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5cb7ef9281c9d71d6a82843f" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5cc64fadcf995a1d6b54e745" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5cc659bc17629e20e1a66f40" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5cd4dabce84cdd76faaf597f" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5cdb32901d30d576fe946d44" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5cedbb5e87823d36e7480823" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5cf580fb87823d36e74808bf" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5d01919b90347136e8e233e0" },
"children": [
{ "$oid": "5d0191dc87823d36e7480ab6" },
{ "$oid": "5d898e340e170b6f2336e8f0" },
{ "$oid": "5d898fc83c6e806fd3bbab51" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "5d0191dc87823d36e7480ab6" },
"children": [
{ "$oid": "5d898e340e170b6f2336e8f0" },
{ "$oid": "5d898fc83c6e806fd3bbab51" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "5d01cc1787e6383735ed12a6" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5d06bcaaefa930373488e7c0" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5d1534be2b4549192d419973" },
"children": [
{ "$oid": "5d153c148c044d174fb9b799" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "5d153c148c044d174fb9b799" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5cf707cde5dbb949ad5cc302" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5d531e95ff66e07233a2bf76" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5d5475e993b2f3707a737d40" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5d54bd25a0e40d1239ec5d9c" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5d54d460cd8ccb13386abd43" },
"children": [
{ "$oid": "5fbdad479a311e6fd58812ff" },
{ "$oid": "599646b5bd0b9864d8e7391d" },
{ "$oid": "5924f500381e3b5854db8a0c" },
{ "$oid": "56675f1446e0324b4566f6e9" },
{ "$oid": "5914d7528ed1755954d6e88f" },
{ "$oid": "5d71b5f49a311e6fd587e3dc" },
{ "$oid": "5d66f0109a311e6fd587e12c" },
{ "$oid": "5cd4dabce84cdd76faaf597f" },
{ "$oid": "5546db39dbeafcef63e6efb6" },
{ "$oid": "5491dd8bd707d710141027c1" },
{ "$oid": "5cf580fb87823d36e74808bf" },
{ "$oid": "58252929332df05c01c1624f" },
{ "$oid": "56ef03976e418ae84779d827" },
{ "$oid": "55dfd7d2bb58034a69d563fe" },
{ "$oid": "58e43b26f79ce47642fae5c4" },
{ "$oid": "577048a0a5f4970b59493861" },
{ "$oid": "5c98455267dcef531cbc44f6" },
{ "$oid": "5850ae570b242ff1782ea07c" },
{ "$oid": "5cc64fadcf995a1d6b54e745" },
{ "$oid": "56ef0296a7b280e91b475aeb" },
{ "$oid": "5491ddb3d707d710141027c2" },
{ "$oid": "5cabd38142524178c66be1f1" },
{ "$oid": "58e9a01f33d3f1f208e032de" },
{ "$oid": "5dae373a3c6e806fd3bbb1fc" },
{ "$oid": "5ba2eb071e910a58acf98e3f" },
{ "$oid": "5be8de44c052dc326ab1e810" },
{ "$oid": "5a2f468069d12b0a0f4cc68e" },
{ "$oid": "61c3a8bf3824dd48d99ab572" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "5d54d4fc5937ee123ad60c9d" },
"children": [
{ "$oid": "5c1a9ae870c07e201b3a4880" },
{ "$oid": "5d59c4efa0e40d1239ec5e14" },
{ "$oid": "5de70b4f9a311e6fd587f4e9" },
{ "$oid": "5c0ec151a9b73222dfdd82d6" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "5d59c4efa0e40d1239ec5e14" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5d66f0109a311e6fd587e12c" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5d66f12d2f2af36f22197fed" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5d66f1cb3c6e806fd3bba448" },
"children": [
{ "$oid": "5d66f12d2f2af36f22197fed" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "5d71b5f49a311e6fd587e3dc" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5d82a7063c6e806fd3bbaa37" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5d898e340e170b6f2336e8f0" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5d898fc83c6e806fd3bbab51" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5dae373a3c6e806fd3bbb1fc" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5de70b4f9a311e6fd587f4e9" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5e44aee59a311e6fd587fb53" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5e4dc8010e170b6f2336fd33" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5e9e56889a311e6fd587ff9c" },
"children": [
{ "$oid": "59503126381e3b5854db8afc" },
{ "$oid": "5be9cc9c20a38c39bc4c807b" },
{ "$oid": "5c083f19d011855d2b41d458" },
{ "$oid": "5cc659bc17629e20e1a66f40" },
{ "$oid": "5491dfa5d707d710141027cb" },
{ "$oid": "5cedbb5e87823d36e7480823" },
{ "$oid": "5be9d2553863d639bbface86" },
{ "$oid": "581bbdfbf0df7f680817970b" },
{ "$oid": "5a24b30df6b76456d074f7c4" },
{ "$oid": "594c8252381e3b5854db8af7" },
{ "$oid": "55c8024609c8cb2176ba55da" },
{ "$oid": "59965edbf39ca264d9dd41ca" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "5ed02be39a311e6fd58802d6" },
"children": [
{ "$oid": "57391e8ec1d461090ef7397d" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "5edd66c79a311e6fd5880363" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5f0b9d810e170b6f2337073d" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5f4f019d0e170b6f23370b53" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5f6175683c6e806fd3bbcef7" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5fbdad479a311e6fd58812ff" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "5fe3bd7a3c6e806fd3bbd9f5" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "60187c220e170b6f23371a5e" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "606e58ad2f2af36f2219bcc8" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "613e86c24faf093afab2c0ea" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "61c3a8bf3824dd48d99ab572" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "61c3b11a4faf093afab2c86e" },
"children": [
{ "$oid": "5a24977405bdd758991bdb93" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "61c3b3e83824dd48d99ab580" },
"children": [
{ "$oid": "5c3bd69f70c07e201b3a4a99" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "61c3b84d7d28ec48d8455710" },
"children": [
{ "$oid": "5a2472d6f6b76456d074f761" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "61c3bb467d28ec48d8455714" },
"children": [
{ "$oid": "5965a855b3e775836dfd8d5b" }
],
"kind": "Organisation"
},
{
"_id": { "$oid": "6241210f7210ae3af7727813" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "6289c9d0adb2f54c79e239d4" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "628da1ce238868408a576c22" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "6298322c238868408a576cc5" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "62eb0a4456bdf04c7768843c" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "639643faf06d0004d42b2457" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "63a23108a4243f051c006f77" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "64090ff9903a4604d5e69032" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "64518b0da4243f051c007932" },
"children": [],
"kind": "Organisation"
},
{
"_id": { "$oid": "64924d566d951e05091e295d" },
"children": [],
"kind": "Organisation"
}
]
When there are duplicates (nodes that occur as child of more than one parent), I would want to only keep the deepest layer and remove those other layers. How can that be done?
(Organisation) 5835f65457eea2852d2bf48c
(Organisation) 59c87107cdfaa27f5759b107
(Organisation) 55aef43d03d4ad2343c2e27f
(Organisation) 56d382a0589377c94614cbbc
(Organisation) 5cdb32901d30d576fe946d44
(Organisation) 5a53e1ac23090e4877973532
(Organisation) 613e86c24faf093afab2c0ea
(Organisation) 62eb0a4456bdf04c7768843c
(Organisation) 5a53ddb8159e7944e0b44795
(Organisation) 606e58ad2f2af36f2219bcc8
(Organisation) 628da1ce238868408a576c22
(Organisation) 592776bc8ed1755954d6e8d5
(Organisation) 59644a45442b1e826dd7cdac
(Organisation) 58ddc042f67c5f75420cc403
(Organisation) 5aaf190e159e7944e0b44fe1
(Organisation) 5b15c4adee10e503a6a6d757
(Organisation) 5491dd7ed707d710141027c0
(Organisation) 5d54d4fc5937ee123ad60c9d
(Organisation) 5c1a9ae870c07e201b3a4880
(Organisation) 5d59c4efa0e40d1239ec5e14
(Organisation) 5de70b4f9a311e6fd587f4e9
(Organisation) 5c0ec151a9b73222dfdd82d6
(Organisation) 5cb7ef9281c9d71d6a82843f
(Organisation) 5cf707cde5dbb949ad5cc302
(Organisation) 5d54bd25a0e40d1239ec5d9c
(Organisation) 54fe27cf5c25b1394be6b303
(Organisation) 6241210f7210ae3af7727813
(Organisation) 5b57b20e8fff7b28249879ae
(Organisation) 5d01cc1787e6383735ed12a6
(Organisation) 5988de44d4978b0596152387
(Organisation) 5d06bcaaefa930373488e7c0
(Organisation) 5ad6ca76159e7944e0b45553
(Organisation) 5b15e2dd5240347c64223fed
(Organisation) 555560f0ab95c2765d65c3cd
(Organisation) 55cd503216db9f1c385a69db
(Organisation) 5f4f019d0e170b6f23370b53
(Organisation) 5a0223cc285a000c2866565c
(Organisation) 5f6175683c6e806fd3bbcef7
(Organisation) 6289c9d0adb2f54c79e239d4
(Organisation) 5a8211ad159e7944e0b44b67
(Organisation) 5d82a7063c6e806fd3bbaa37
(Organisation) 5771fda4d0c907f02785022a
(Organisation) 5af905d15240347c64223af3
(Organisation) 5702f5161c852788280926f3
(Organisation) 5f0b9d810e170b6f2337073d
(Organisation) 5a0dfc4894ba750156a47e9c
(Organisation) 5b4e5a958fff7b2824987846
(Organisation) 57ce00596dfb923915cf9a7f
(Organisation) 5c075bd666a1c95d2acc6a3f
(Organisation) 5c5cd18745f41e78ebfb0732
(Organisation) 5c5cd1a31279d46f7d90a186
(Organisation) 5c609d8686e12578ea359383
(Organisation) 5b6cd1aff6056722483d49f2
(Organisation) 5d531e95ff66e07233a2bf76
(Organisation) 5d5475e993b2f3707a737d40
(Organisation) 5c64ccb086e12578ea359499
(Organisation) 5c85a3b56ce63b531de0eaef
(Organisation) 5caabb5bc8bbd278c0392dab
(Organisation) 5d01919b90347136e8e233e0
(Organisation) 5d0191dc87823d36e7480ab6
(Organisation) 5d898e340e170b6f2336e8f0
(Organisation) 5d898fc83c6e806fd3bbab51
(Organisation) 5d1534be2b4549192d419973
(Organisation) 5d153c148c044d174fb9b799
(Organisation) 5d54d460cd8ccb13386abd43
(Organisation) 577048a0a5f4970b59493861
(Organisation) 5914d7528ed1755954d6e88f
(Organisation) 56675f1446e0324b4566f6e9
(Organisation) 5924f500381e3b5854db8a0c
(Organisation) 5cc64fadcf995a1d6b54e745
(Organisation) 5d71b5f49a311e6fd587e3dc
(Organisation) 599646b5bd0b9864d8e7391d
(Organisation) 5850ae570b242ff1782ea07c
(Organisation) 5cd4dabce84cdd76faaf597f
(Organisation) 58e9a01f33d3f1f208e032de
(Organisation) 5546db39dbeafcef63e6efb6
(Organisation) 5fbdad479a311e6fd58812ff
(Organisation) 5cabd38142524178c66be1f1
(Organisation) 5491ddb3d707d710141027c2
(Organisation) 5d66f0109a311e6fd587e12c
(Organisation) 56ef0296a7b280e91b475aeb
(Organisation) 58e43b26f79ce47642fae5c4
(Organisation) 58252929332df05c01c1624f
(Organisation) 55dfd7d2bb58034a69d563fe
(Organisation) 56ef03976e418ae84779d827
(Organisation) 5491dd8bd707d710141027c1
(Organisation) 5ba2eb071e910a58acf98e3f
(Organisation) 5cf580fb87823d36e74808bf
(Organisation) 5dae373a3c6e806fd3bbb1fc
(Organisation) 61c3a8bf3824dd48d99ab572
(Organisation) 5a2f468069d12b0a0f4cc68e
(Organisation) 5be8de44c052dc326ab1e810
(Organisation) 5c98455267dcef531cbc44f6
(Organisation) 5d66f1cb3c6e806fd3bba448
(Organisation) 5d66f12d2f2af36f22197fed
(Organisation) 5e44aee59a311e6fd587fb53
(Organisation) 5e4dc8010e170b6f2336fd33
(Organisation) 5e9e56889a311e6fd587ff9c
(Organisation) 59503126381e3b5854db8afc
(Organisation) 5be9cc9c20a38c39bc4c807b
(Organisation) 5c083f19d011855d2b41d458
(Organisation) 5cc659bc17629e20e1a66f40
(Organisation) 5491dfa5d707d710141027cb
(Organisation) 5cedbb5e87823d36e7480823
(Organisation) 5be9d2553863d639bbface86
(Organisation) 5a24b30df6b76456d074f7c4
(Organisation) 594c8252381e3b5854db8af7
(Organisation) 55c8024609c8cb2176ba55da
(Organisation) 581bbdfbf0df7f680817970b
(Organisation) 59965edbf39ca264d9dd41ca
(Organisation) 5ed02be39a311e6fd58802d6
(Organisation) 57391e8ec1d461090ef7397d
(Organisation) 5edd66c79a311e6fd5880363
(Organisation) 5fe3bd7a3c6e806fd3bbd9f5
(Organisation) 60187c220e170b6f23371a5e
(Organisation) 61c3b11a4faf093afab2c86e
(Organisation) 5a24977405bdd758991bdb93
(Organisation) 61c3b3e83824dd48d99ab580
(Organisation) 5c3bd69f70c07e201b3a4a99
(Organisation) 61c3b84d7d28ec48d8455710
(Organisation) 5a2472d6f6b76456d074f761
(Organisation) 61c3bb467d28ec48d8455714
(Organisation) 5965a855b3e775836dfd8d5b
(Organisation) 6298322c238868408a576cc5
(Organisation) 639643faf06d0004d42b2457
(Organisation) 63a23108a4243f051c006f77
(Organisation) 64090ff9903a4604d5e69032
(Organisation) 64518b0da4243f051c007932
(Organisation) 64924d566d951e05091e295d
const data = require("./dat.json");
function createTree(data, rootId) {
const root = data.find((item) => item._id.$oid === rootId);
if (!root) return null;
const children = root.children.map((child) => createTree(data, child.$oid));
return {
...root,
children,
};
}
function prettyPrint(nodes, level = 0) {
nodes.forEach((node) => {
console.log(`${" ".repeat(level)} (${node.kind}) ${node._id.$oid}`);
prettyPrint(node.children, level + 2);
});
}
const forest = data.map((item) => createTree(data, item._id.$oid));
prettyPrint(forest);
This code produces output, but I don't want those duplicated ids that appear, like here:
The problem is that your forest
will get a node for each item in data
. You should only have top-level entries in the forest
array. To know which they are, you first have to check which nodes have no parent. This you can do while building the nested object structure.
So adapt your createTree
function, so it only takes the data
as argument, and it returns the array of root nodes.
I would also avoid having to scan the data with find
each time you need to look up an id. Use a hashmap for that (could be a plain object in JavaScript).
Like this:
function createTree(data) {
const nodes = Object.fromEntries(data.map(item =>
[item._id.$oid, { ...item, children: [] }]
));
const roots = new Set(Object.values(nodes));
for (const {_id, children} of data) {
nodes[_id.$oid].children.push(...children.map(({$oid}) => {
roots.delete(nodes[$oid]);
return nodes[$oid];
}));
}
return [...roots];
}
This will retain the children that are the child of more than one parent. To keep only the occurrences where that child has the deepest level, you could first collect the deepest depth of each node and then only keep those nodes whose depth is that deepest depth. In case of ties, just keep the first encountered one.
The following function can do that kind of post processing:
function cleanTree(roots) {
const depths = new Map;
function collectDepths(nodes, depth) {
for (const node of nodes) {
depths.set(node, Math.max(depths.get(node) ?? 0, depth));
collectDepths(node.children, depth+1);
}
}
function removeShallowDupes(nodes, depth) {
nodes = nodes.filter(node => depth == depths.get(node) && depths.delete(node));
nodes.forEach(node => node.children = removeShallowDupes(node.children, depth+1));
return nodes;
}
collectDepths(roots, 0);
return removeShallowDupes(roots, 0);
}
Call like this:
const forest = cleanTree(createTree(data));
prettyPrint(forest);
(No change is needed in prettyPrint
).