I have a JSON data containing folder structure details. All that is required is to give a folder name and retrieve its parent hierarchy.
My structure is as follows...
FolderHome lvl1 lvl11 lvl12 lvl13 lvl2 lvl21 lvl22 lvl23
What I need is output
FolderHome\lvl2
If findparent('lvl23')
is called. FolderHome\lvl1
If findparent('lvl12')
is called. { "Items": [ { "Name": "FolderHome", "ID": 1, "ParentID": 0, "OwnerID": 0, "HasParent": false, "HasOwner": false, "ValueListID": 4, "DisplayID": "1", "HasIcon": false, "HasAutomaticPermission": false, "IsDeleted": false, "ItemGUID": "{1F58043A-2876-44A5-B3FA-B170098C32F1}" }, { "Name": "lvl1", "ID": 11, "ParentID": 1, "OwnerID": 0, "HasParent": true, "HasOwner": false, "ValueListID": 4, "DisplayID": "11", "HasIcon": false, "HasAutomaticPermission": false, "IsDeleted": false, "ItemGUID": "{915BA6C4-3FDE-4B8F-AD87-A0054C8A6A9C}" }, { "Name": "lvl2", "ID": 15, "ParentID": 1, "OwnerID": 0, "HasParent": true, "HasOwner": false, "ValueListID": 4, "DisplayID": "15", "HasIcon": false, "HasAutomaticPermission": false, "IsDeleted": false, "ItemGUID": "{84341658-816A-4987-87F6-75CAE1AE81E7}" }, { "Name": "lvl21", "ID": 16, "ParentID": 15, "OwnerID": 0, "HasParent": true, "HasOwner": false, "ValueListID": 4, "DisplayID": "16", "HasIcon": false, "HasAutomaticPermission": false, "IsDeleted": false, "ItemGUID": "{0AFC4C26-D54B-4959-9276-D3ED1B447316}" }, { "Name": "lvl22", "ID": 17, "ParentID": 15, "OwnerID": 0, "HasParent": true, "HasOwner": false, "ValueListID": 4, "DisplayID": "17", "HasIcon": false, "HasAutomaticPermission": false, "IsDeleted": false, "ItemGUID": "{6005594F-71E3-4880-8843-36081DB7CA29}" }, { "Name": "lvl23", "ID": 18, "ParentID": 15, "OwnerID": 0, "HasParent": true, "HasOwner": false, "ValueListID": 4, "DisplayID": "18", "HasIcon": false, "HasAutomaticPermission": false, "IsDeleted": false, "ItemGUID": "{0B2453DA-8ED0-4C6C-8F3B-F05DD3B63AA1}" }, { "Name": "lvl11", "ID": 12, "ParentID": 11, "OwnerID": 0, "HasParent": true, "HasOwner": false, "ValueListID": 4, "DisplayID": "12", "HasIcon": false, "HasAutomaticPermission": false, "IsDeleted": false, "ItemGUID": "{4014C72D-FC10-4B21-AD62-6B7562F44833}" }, { "Name": "lvl12", "ID": 13, "ParentID": 11, "OwnerID": 0, "HasParent": true, "HasOwner": false, "ValueListID": 4, "DisplayID": "13", "HasIcon": false, "HasAutomaticPermission": false, "IsDeleted": false, "ItemGUID": "{9351B350-DFAC-4BE2-ABF0-AD5FCAC7F48A}" }, { "Name": "lvl13", "ID": 14, "ParentID": 11, "OwnerID": 0, "HasParent": true, "HasOwner": false, "ValueListID": 4, "DisplayID": "14", "HasIcon": false, "HasAutomaticPermission": false, "IsDeleted": false, "ItemGUID": "{661480EA-7382-4023-9FF3-0C7205DAB5BF}" } ] }
// If the required node is found, return true // matching nodes added to the result parameter var findParent = function (parentnode, id, result) { if (parentnode.Id == id){ result.push(parentnode.Parent); return true; } if (parentnode.children) { for (var i = 0; i < parentnode.children.length; i++) { var node = parentnode.children[i]; if (parentnode.Parent && findParent(node, id, result)) { result.push(parentnode.Parent); return true; } } } // no matches found - return false return false; } var result = []; findParent(obj, "13", result) console.log(result);
My code just returns []
.
P粉4045397322023-09-08 12:29:46
You can take two helper objects, one for the name and one for the parents.
const items = [{ Name: "FolderHome", ID: 1, ParentID: 0 }, { Name: "lvl1", ID: 11, ParentID: 1 }, { Name: "lvl2", ID: 15, ParentID: 1 }, { Name: "lvl21", ID: 16, ParentID: 15 }, { Name: "lvl22", ID: 17, ParentID: 15 }, { Name: "lvl23", ID: 18, ParentID: 15 }, { Name: "lvl11", ID: 12, ParentID: 11 }, { Name: "lvl12", ID: 13, ParentID: 11 }, { Name: "lvl13", ID: 14, ParentID: 11 }], idName = Object.fromEntries(items.map(({ ID, Name }) => [ID, Name])), nameParentID = Object.fromEntries(items.map(({ Name, ParentID }) => [Name, ParentID])), getParents = name => { const p = nameParentID[name]; if (!p) return ''; const pName = getParents(idName[p]); return pName + (pName && '\') + idName[p]; } console.log(getParents('lvl23')); // FolderHome\lvl2 console.log(getParents('lvl12')); // FolderHome\lvl1