简体   繁体   中英

Nested Array Tree Node JS

I am comparing 2 arrays with the ID's and adding nested children objects to generate the tree.

if you look in the code comparing issue_id with descendents_parent_issue_id

I am able to generate the tree but a children is adding only 1 object. Expecting tree level nested objects.

Following Code Output

[{
    "issue_id": 2,
    "parent_issue_id": null,
    "issue": "Availability",
    "issue_code": null,
    "hierarchy_level": 1,
    "children": [{
        "issue_id": 7,
        "parent_issue_id": 2,
        "issue": "Breakdown",
        "issue_code": "bd7catA",
        "entity_id": null,
        "hierarchy_level": 2,
        "children": [{
            "issue_id": 881,
            "parent_issue_id": 7,
            "issue": "Hydraulic arm failure",
            "issue_code": null,
            "entity_id": 52,
            "hierarchy_level": 3
        }]
    }]
}, {
    "issue_id": 1,
    "parent_issue_id": null,
    "issue": "Loading",
    "issue_code": null,
    "hierarchy_level": 1
}, {
    "issue_id": 3,
    "parent_issue_id": null,
    "issue": "Performance",
    "issue_code": null,
    "hierarchy_level": 1
}, {
    "issue_id": 4,
    "parent_issue_id": null,
    "issue": "Quality",
    "issue_code": null,
    "hierarchy_level": 1
}] 

My Code

 const issuesList = [ { "issue_id": 2, "parent_issue_id": null, "issue": "Availability", "issue_code": null, "hierarchy_level": 1 }, { "issue_id": 1, "parent_issue_id": null, "issue": "Loading", "issue_code": null, "hierarchy_level": 1 }, { "issue_id": 3, "parent_issue_id": null, "issue": "Performance", "issue_code": null, "hierarchy_level": 1 }, { "issue_id": 4, "parent_issue_id": null, "issue": "Quality", "issue_code": null, "hierarchy_level": 1 } ]; const issues = [{ "issue_id": 2, "parent_issue_id": null, "issue": "Availability", "issue_code": null, "entity_id": null, "hierarchy_level": 1, "descendents_issue_id": 7, "descendents_parent_issue_id": 2, "descendents_issue": "Breakdown", "descendents_issue_code": "bd7catA", "descendents_entity_id": null, "descendents_hierarchy_level": 2, "descendents_issuesancestor_issues_issue_id": 7, "descendents_issuesancestor_ancestor_issue_id": 2 }, { "issue_id": 2, "parent_issue_id": null, "issue": "Availability", "issue_code": null, "entity_id": null, "hierarchy_level": 1, "descendents_issue_id": 881, "descendents_parent_issue_id": 7, "descendents_issue": "Hydraulic arm failure", "descendents_issue_code": null, "descendents_entity_id": 52, "descendents_hierarchy_level": 3, "descendents_issuesancestor_issues_issue_id": 881, "descendents_issuesancestor_ancestor_issue_id": 2 }, { "issue_id": 2, "parent_issue_id": null, "issue": "Availability", "issue_code": null, "entity_id": null, "hierarchy_level": 1, "descendents_issue_id": 8, "descendents_parent_issue_id": 2, "descendents_issue": "Setup/ Changeover", "descendents_issue_code": "st8catA", "descendents_entity_id": null, "descendents_hierarchy_level": 2, "descendents_issuesancestor_issues_issue_id": 8, "descendents_issuesancestor_ancestor_issue_id": 2 }, { "issue_id": 2, "parent_issue_id": null, "issue": "Availability", "issue_code": null, "entity_id": null, "hierarchy_level": 1, "descendents_issue_id": 942, "descendents_parent_issue_id": 7, "descendents_issue": "Pump Overload", "descendents_issue_code": null, "descendents_entity_id": 52, "descendents_hierarchy_level": 3, "descendents_issuesancestor_issues_issue_id": 942, "descendents_issuesancestor_ancestor_issue_id": 2 } ]; function processIssues(arr, arrayB) { return arr.reduce((result, item) => { const itemInB = arrayB.find(itemB => itemB.descendents_parent_issue_id == item.issue_id) if (itemInB) { let child = []; child.push({ issue_id: itemInB.descendents_issue_id, parent_issue_id: itemInB.descendents_parent_issue_id, issue: itemInB.descendents_issue, issue_code: itemInB.descendents_issue_code, entity_id: itemInB.descendents_entity_id, hierarchy_level: itemInB.descendents_hierarchy_level }); item.children = child; } if (item.children) { processIssues(item.children, arrayB) } return [...result, item]; }, []); } var sourceIssue = processIssues(issuesList, issues); console.log(JSON.stringify(sourceIssue));

Expected output

[{
    "issue_id": 2,
    "parent_issue_id": null,
    "issue": "Availability",
    "issue_code": null,
    "hierarchy_level": 1,
    "children": [{
        "issue_id": 7,
        "parent_issue_id": 2,
        "issue": "Breakdown",
        "issue_code": "bd7catA",
        "entity_id": null,
        "hierarchy_level": 2,
        "children": [{
            "issue_id": 881,
            "parent_issue_id": 7,
            "issue": "Hydraulic arm failure",
            "issue_code": null,
            "entity_id": 52,
            "hierarchy_level": 3
        },{
            "issue_id": 942,
            "parent_issue_id": 7,
            "issue": "Pump Overload",
            "issue_code": null,
            "entity_id": 52,
            "hierarchy_level": 3
          }]
    }]
}, {
    "issue_id": 1,
    "parent_issue_id": null,
    "issue": "Loading",
    "issue_code": null,
    "hierarchy_level": 1
}, {
    "issue_id": 3,
    "parent_issue_id": null,
    "issue": "Performance",
    "issue_code": null,
    "hierarchy_level": 1
}, {
    "issue_id": 4,
    "parent_issue_id": null,
    "issue": "Quality",
    "issue_code": null,
    "hierarchy_level": 1
}]

Please help

 const issuesList = [ { "issue_id": 2, "parent_issue_id": null, "issue": "Availability", "issue_code": null, "hierarchy_level": 1 }, { "issue_id": 1, "parent_issue_id": null, "issue": "Loading", "issue_code": null, "hierarchy_level": 1 }, { "issue_id": 3, "parent_issue_id": null, "issue": "Performance", "issue_code": null, "hierarchy_level": 1 }, { "issue_id": 4, "parent_issue_id": null, "issue": "Quality", "issue_code": null, "hierarchy_level": 1 } ]; const issues = [{ "issue_id": 2, "parent_issue_id": null, "issue": "Availability", "issue_code": null, "entity_id": null, "hierarchy_level": 1, "descendents_issue_id": 7, "descendents_parent_issue_id": 2, "descendents_issue": "Breakdown", "descendents_issue_code": "bd7catA", "descendents_entity_id": null, "descendents_hierarchy_level": 2, "descendents_issuesancestor_issues_issue_id": 7, "descendents_issuesancestor_ancestor_issue_id": 2 }, { "issue_id": 2, "parent_issue_id": null, "issue": "Availability", "issue_code": null, "entity_id": null, "hierarchy_level": 1, "descendents_issue_id": 881, "descendents_parent_issue_id": 7, "descendents_issue": "Hydraulic arm failure", "descendents_issue_code": null, "descendents_entity_id": 52, "descendents_hierarchy_level": 3, "descendents_issuesancestor_issues_issue_id": 881, "descendents_issuesancestor_ancestor_issue_id": 2 }, { "issue_id": 2, "parent_issue_id": null, "issue": "Availability", "issue_code": null, "entity_id": null, "hierarchy_level": 1, "descendents_issue_id": 8, "descendents_parent_issue_id": 2, "descendents_issue": "Setup/ Changeover", "descendents_issue_code": "st8catA", "descendents_entity_id": null, "descendents_hierarchy_level": 2, "descendents_issuesancestor_issues_issue_id": 8, "descendents_issuesancestor_ancestor_issue_id": 2 }, { "issue_id": 2, "parent_issue_id": null, "issue": "Availability", "issue_code": null, "entity_id": null, "hierarchy_level": 1, "descendents_issue_id": 942, "descendents_parent_issue_id": 7, "descendents_issue": "Pump Overload", "descendents_issue_code": null, "descendents_entity_id": 52, "descendents_hierarchy_level": 3, "descendents_issuesancestor_issues_issue_id": 942, "descendents_issuesancestor_ancestor_issue_id": 2 } ]; function processIssues(arr, arrayB) { return arr.reduce((result, item) => { const itemInB = arrayB.find(itemB => itemB.descendents_parent_issue_id == item.issue_id) if (itemInB) { let child = []; child.push({ issue_id: itemInB.descendents_issue_id, parent_issue_id: itemInB.descendents_parent_issue_id, issue: itemInB.descendents_issue, issue_code: itemInB.descendents_issue_code, entity_id: itemInB.descendents_entity_id, hierarchy_level: itemInB.descendents_hierarchy_level }); item.children = processIssues(child, arrayB); } return [...result, item]; }, []); } var sourceIssue = processIssues(issuesList, issues); console.log(JSON.stringify(sourceIssue));

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