JS verwendet die Methode „reduce()“, um Baumstrukturdaten zu verarbeiten

JS verwendet die Methode „reduce()“, um Baumstrukturdaten zu verarbeiten

Definition

Die Methode „reduce()“ führt eine Reduzierungsfunktion aus, die Sie für jedes Element im Array bereitstellen (in aufsteigender Reihenfolge), und fasst die Ergebnisse in einem einzigen Rückgabewert zusammen.

reduce() durchläuft wie forEach(), map() und filter() auch jedes Element im Array, aber reduce() kann mit dem aktuell durchlaufenen Element auf dem Ergebnis des zuvor durchlaufenen Array-Elements operieren.

Grammatik

array.reduce(Funktion(vorherige, aktuelle, Index, Array){
    ...
}, init);

Parameter in der Callback-Funktion:

  • prev Erforderlich. Gibt den Rückgabewert beim Aufruf des Callbacks bzw. den Anfangswert init an.
  • cur Erforderlich. Stellt das aktuelle Element dar.
  • Index Optional. Gibt den Index des aktuellen Elements an.
  • Array stellt das ursprüngliche Array dar.
  • init Optional. Der Anfangswert, der als erstes Argument des ersten Aufrufs der Rückruffunktion verwendet wird.

Gemeinsame Parameter: prev und cur

Hinweis: Wenn die Rückruffunktion zum ersten Mal ausgeführt wird, gibt es zwei Fälle für die Werte von prev und cur: Wenn beim Aufruf von reduce() der Anfangswert init angegeben wird, übernimmt prev den Anfangswert und cur den ersten Wert im Array und der Index beginnt bei 0; wenn der Anfangswert init nicht angegeben wird, übernimmt prev den ersten Wert im Array und cur den zweiten Wert im Array und der Index beginnt bei 1.

Beispiele

1. Es wird kein Anfangswert init übergeben

const arr = [1, 3, 5, 7]
arr.reduce(Funktion(vorherige, aktuell, Index, arr){
    console.log(vorherige, aktuell, index)
    Zurück Vorherige + Aktuelle
})

Die Parameter und Rückgabewerte für jeden Aufruf sind wie folgt:

Rückruf Zurück aktuell Index Anordnung Rückgabewert
Zum 1. Mal 1 3 1 [1, 3, 5, 7] 4
2. Mal 4 5 2 [1, 3, 5, 7] 9
3. Platz 9 7 3 [1, 3, 5, 7] 16

Da kein Anfangswert übergeben wird, beginnt der Index bei 1. Der Rückruf wird dreimal aufgerufen. Zu Beginn ist der Wert von prev 1, das erste Element im Array, und der Wert von cur ist 3. Nach der Addition wird der Rückgabewert 4 als prev-Wert der nächsten Rückrufrunde verwendet. Anschließend wird die nächste Rückrufrunde fortgesetzt, bis sie abgeschlossen und zurückgegeben wird.

2. Bei der Übergabe des Anfangswertes

const arr = [1, 3, 5, 7]
arr.reduce(Funktion(vorherige, aktuell, Index, arr){
    console.log(vorherige, aktuell, index)
    Zurück Vorherige + Aktuelle
}, 10)

Die Parameter und Rückgabewerte für jeden Aufruf sind wie folgt:

Rückruf Zurück aktuell Index Anordnung Rückgabewert
Zum 1. Mal 10 1 0 [1, 3, 5, 7] 11
2. Mal 11 3 1 [1, 3, 5, 7] 14
3. Platz 14 5 2 [1, 3, 5, 7] 19
4. Platz 19 7 3 [1, 3, 5, 7] 26

3. Array-Deduplizierung

const arr = ['ab', 'v', 'd', 'ab', 'h', 'e', ​​​​'dc', 'e', ​​​​'e', ​​'f']
const newArr = arr.reduce(Funktion(vorherige, aktuelle){
    !vorherige.includes(aktuell) && vorherige.push(aktuell)
    Zurück Zurück
}, [])
console.log(newArr) // ["ab", "v", "d", "h", "e", "dc", "f"]

Die durchzuführenden Schritte sind wie folgt:

  • Initialisieren Sie ein leeres Array
  • Beim ersten Aufruf ist prev der Anfangswert, also ein leeres Array, und cur ist das erste Element im Array, arr[1]. Dann wird prev durchsucht, um zu sehen, ob cur bereits existiert. Wenn nicht, wird das Element zu prev hinzugefügt und prev kehrt zurück, um den nächsten Rückruf einzugeben.
  • Im zweiten Callback ist prev der Rückgabewert des ersten Callbacks, cur ist das zweite Element im Array arr[2], und dann wird prev durchsucht, um zu sehen, ob cur bereits existiert. Wenn nicht, wird das Element zu prev hinzugefügt, und prev kehrt zurück, um den nächsten Callback einzugeben.
  • Geben Sie abschließend das vorherige Array zurück

4. Verwenden Sie „Reduce“, um Object-Objekte in einem Array zu gruppieren und zusammenzuführen

//Holen Sie sich das Objekt-Array aus dem Hintergrund, gruppieren Sie es nach Objekttyp und fügen Sie es zu einem Baum zusammen, um die Daten anzuzeigen const dataArr = [
    { Typ: 'Governance-Ebene', Name: 'hive_82', Reserve: '2', ID: 1 },
    { Typ: 'Ursprüngliche Datenebene', Name: 'qwe', Reserve: '1', ID: 2 },
    { Typ: 'Quellebene', Name: 'mysql_exchangis', Reserve: '3', ID: 3 },
    { Typ: 'Governance-Ebene', Name: 'links_188', Reserve: '1', ID: 4 },
    { Typ: 'Quellebene', Name: 'mysql_ces', Reserve: '2', ID: 5 }
]
const treeData = dataArr.reduce((cur, next) => {
    const obj = cur.find(curItem => curItem.label === nächster.Typ)
    wenn (Objekt) {
        if (obj.children.indexOf(next.id) === -1) { //Deduplizierung obj.children.push({ 
                ...nächste, 
                Bezeichnung: nächster.name 
            })
        }
    } anders {
        const neuesObj = {
            Bezeichnung: nächster.Typ,
            Kinder: [{
                ...nächste,
                Bezeichnung: nächster.name
            }]
        }
        cur.push(neuesObjekt)
    }
    Rückgabewert aktuell
}, [])
​
// Das Ergebnis nach dem Zusammenführen:
Baumdaten = [
    {
        Bezeichnung: „Governance“,
        Kinder: [
            { Typ: 'Governance-Ebene', Name: 'hive_82', Reserve: '2', ID: 1, Bezeichnung: 'hive_82' },
            { Typ: ‚Governance-Ebene‘, Name: ‚links_188‘, Reserve: ‚1‘, ID: 4, Bezeichnung: ‚links_188‘ }
        ]
    },
    {
        Bezeichnung: 'Ursprüngliche Datenebene',
        Kinder: [
            { Typ: ‚Ursprüngliche Datenebene‘, Name: ‚qwe‘, Reserve: ‚1‘, ID: 2, Bezeichnung: ‚qwe‘ }
        ]
    },
    {
        Bezeichnung: 'Quellebene',
        Kinder: [
            { Typ: 'Quellebene', Name: 'mysql_exchangis', Reserve: '3', ID: 3, Bezeichnung: 'mysql_exchangis' },
            { Typ: ‚Governance-Ebene‘, Name: ‚mysql_ces‘, Reserve: ‚2‘, ID: 5, Bezeichnung: ‚mysql_ces‘ }
        ]
    }
]

5. Verwenden Sie „Reduce“, um die vom Menü-Backend zurückgegebene Menüstruktur zu verarbeiten

Diese Daten müssen basierend auf der ParentId in eine hierarchische Struktur konvertiert werden.

Methode 1:

const DatenArr = [
    {id: '18', name: 'Passwort zurücksetzen', parentId: '30', parentName: 'Benutzerverwaltung'}, 
    {id: '13', name: 'Überwachungsprotokoll', parentId: '29', parentName: 'Systemverwaltung'}, 
    {id: '29', name: 'Systemverwaltung', parentId: '0', parentName: null}, 
    {id: '14', name: 'Ändern', parentId: '33', parentName: 'Abteilungsleitung'}, 
    {id: '2', name: 'Benutzerliste', parentId: '30', parentName: 'Benutzerverwaltung'}, 
    {id: '30', name: 'Benutzerverwaltung', parentId: '29', parentName: 'Systemverwaltung'}, 
    {id: '33', name: 'Abteilungsleitung', parentId: '0', parentName: null}, 
    {id: '37', name: 'Benutzer hinzufügen', parentId: '30', parentName: 'Benutzerverwaltung'}, 
    {id: '6', name: 'Hinzufügen', parentId: '33', parentName: 'Abteilungsleitung'}, 
    {id: '7',name: 'Löschen', parentId: '33', parentName: 'Abteilungsleitung'}
]
//Erstellen Sie eine Zuordnungsbeziehung für die Menü-ID const idMapping = dataArr.reduce((prev, next, i) => {
    vorherige[nächste.id] = i
    Zurück Zurück
}, {})
​
const treeData = []
dataArr.map(el => {
    // Menü der ersten Ebene wenn (el.parentId === '0') {
        treeData.push(el)
        zurückkehren
    }
    
    // Finde das übergeordnete Element durch Mapping const parentEl = dataArr[idMapping[el.parentId]] 
​
    // Füge das aktuelle Element dem `children`-Array des übergeordneten Elements hinzu parentEl.children = [...(parentEl.children || []), el]
})
console.log(Baumdaten)

Methode 2:

//Erstellen Sie eine Zuordnungsbeziehung basierend auf der übergeordneten ID const result = dataArr.reduce((prev, next) => {
    vorherige[nächste.parentId] ? vorherige[nächste.parentId].push(nächste) : vorherige[nächste.parentId] = [nächste];
    zurück vorh.;
}, {});
       
Objekt.Schlüssel(Ergebnis).Map(Schlüssel => {
    Ergebnis[Schlüssel].map((Element, i) => {
        Ergebnis[item.id] ? item.children = Ergebnis[item.id] : ''
    });
}) 
this.treeData = Ergebnis[0]
console.log(Baumdaten)

Dies kann auch durch Rekursion erreicht werden, was aber nicht im Detail beschrieben wird.

Die endgültige Datenstruktur ist in der folgenden Abbildung dargestellt:

Oben sind die Details, wie JS die Methode „reduce()“ verwendet, um Baumstrukturdaten zu verarbeiten. Weitere Informationen zu JS finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • JavaScript-Datenstruktur: Erstellen einer Hash-Tabelle (1)
  • Wörterbuchmethode für JavaScript-Datenstrukturen
  • Erstellen einer JavaScript-Datenstruktursammlung (2)
  • Erstellen einer JavaScript-Datenstruktursammlung (1)
  • Detaillierte Erklärung der Map-Datenstruktur in JavaScript
  • Konvertieren Sie die Datenstruktur der Go-Sprache in JSON
  • Effizienter JavaScript-Algorithmus zum Konvertieren flacher Daten in eine Baumstruktur
  • js realisiert eine unendliche hierarchische Baumdatenstruktur (innovativer Algorithmus)
  • JavaScript-Datenstruktur: Erstellen einer Hash-Tabelle (2)

<<:  Beispiel zur Optimierung der MySQL-Einfügeleistung

>>:  Detaillierte Erklärung der Gründe und Optimierungen für den großen Offset, der die Leistung bei MySQL-Abfragen beeinträchtigt

Artikel empfehlen

Wie viele gängige Schleifen zur Array-Traversierung in JS kennen Sie?

Vorwort Als grundlegende Datenstruktur spielen Ar...

Natives JS zur Implementierung eines Dropdown-Menüs

Dropdown-Menüs sind auch im wirklichen Leben weit...

Fünf Möglichkeiten zum Durchlaufen von JavaScript-Arrays

Inhaltsverzeichnis 1. for-Schleife: grundlegend u...

Analyse der Vor- und Nachteile von gespeicherten MySQL-Prozeduren

MySQL Version 5.0 begann, gespeicherte Prozeduren...

JavaScript zur Implementierung der Webversion des Schlangenspiels

In diesem Artikel wird der spezifische Code für J...

React implementiert den Beispielcode der Radiokomponente

Ziel dieses Artikels ist es, die Grundfunktionen ...

CentOS 6 Kompilieren und installieren Sie ZLMediaKit-Analyse

Installieren Sie ZLMediaKit auf centos6 Der Autor...

SQL-Funktion zum Zusammenführen eines Feldes

Vor kurzem musste ich alle Felder einer verknüpft...

4 Möglichkeiten zur Optimierung von MySQL-Abfragen für Millionen von Daten

Inhaltsverzeichnis 1. Der Grund, warum das Limit ...

Detaillierte Erklärung der Lösung für den 404-Fehler von Tomcat

Das 404-Problem tritt im Tomcat-Test auf. Die Pro...

Wie stelle ich Tomcat als automatisch gestarteten Dienst ein? Der schnellste Weg

Stellen Sie Tomcat so ein, dass der Dienst automa...

HTML-Tutorial, leicht zu erlernende HTML-Sprache

1. <body background=Bilddateiname bgcolor=Farb...

Implementierungsprinzip und Nutzungsanalyse des Apache Bench-Stresstest-Tools

1: Durchsatz (Anfragen pro Sekunde) Eine quantita...