[FIXED] So wechseln Sie zwischen untergeordneten Elementen in JavaScript, um eine Breadcrumb-Benutzeroberfläche aus JSON zu erstellen

Ausgabe

Was ich brauche, ist, ein Breadcrumb aus einem JSON zu erstellen, das die Struktur des Breadcrumb definiert.

Parent / Node >Comm> Forms Code>Test Menu

Problem

>A>B>Comm>Comm Code>Forms Code>Test Menu”></a></p>
<p><font style=Im geschachtelten Json-Objekt bezieht sich parent_id auf die ID im JSON-Objekt.

Js-Code

        ngOnInit() {
            let data = [];
            let jsonValues = JSON.stringify(this.jasonData1);
            const main_menu_items = JSON.parse(jsonValues);

            var treeNodes = [];

            this.childernNodes = nestedChildrens(main_menu_items.value, 0);

            console.log(this.childernNodes);

            function nestedChildrens(nodes, level) {
              //treeNodes[level] = treeNodes[level] || [];
              var total = 0;

              nodes.children.forEach(node => {
                var ccount = 0;

                if ("children" in node) {
                  var ccount = nestedChildrens(node, total + 1);
                } else {
                  ccount = 1;
                }
                // console.log(node.parent_id);

                treeNodes.push({
                  node,
                  tree_node: total
                });

                total += ccount;
              });

              const sorted = Object.values(treeNodes).sort(
                (a, b) => a.node.id - b.node.id
              );
              return sorted;
            }
          }
        }

Stapelblitz

https://stackblitz.com/edit/angular-tree-node-test-znreuv

Jeder Vorschlag ist sehr willkommen

Lösung

Erstellen Sie ein Wörterbuch mit Knoten, die nach ID indiziert sind. Beginnen Sie dann beim Blattknoten, folgen Sie den parent_ids und holen Sie sich die übergeordneten Knoten aus dem Wörterbuch, das Sie am Anfang erstellt haben. Hängen Sie dabei die Knoten an den Anfang eines Arrays an, das den Breadcrumb darstellt.

Etwas wie:

Beim Überqueren:

    nodesDictionary[node.id] = {
      node,
      tree_node: total
    };

Dann:

let currentNode = nodesDictionary["156"];
while (currentNode && currentNode.node.parent_id) {
  this.childernNodes = [currentNode, ...this.childernNodes];
  currentNode = nodesDictionary[currentNode.node.parent_id];
}

https://stackblitz.com/edit/angular-tree-node-test-hphtlw?file=src/app/app.component.ts


Beantwortet von –
Tiago Coelho


Antwort geprüft von –
Gilberto Lyons (FixError Admin)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like