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

js canvas realisiert Bilder mit abgerundeten Ecken

In diesem Artikel wird der spezifische Code von J...

Warum wird IE6 von den meisten Leuten verwendet?

In erster Linie bin ich Webdesigner. Genauer gesag...

So verwenden Sie Font Awesome 5 in Vue-Entwicklungsprojekten

Inhaltsverzeichnis Abhängigkeiten installieren Ko...

So erhalten Sie Datums-/Uhrzeitdaten in MySQL, gefolgt von .0

Der Datentyp von MySQL ist datetime. Die in der D...

Zusammenfassung verschiedener Methoden zur JS-Datentyperkennung

Inhaltsverzeichnis Hintergrund Welche Methoden gi...

Methode für die Sicherheitseinstellungen des Tomcat-Servers

Tomcat ist ein HTTP-Server, der die offizielle Re...

Interpretation von 17 Werbewirksamkeitsmaßen

1. 85 % der Anzeigen werden nicht gelesen <br ...

Eine kurze Diskussion über JS-Verpackungsobjekte

Inhaltsverzeichnis Überblick Definition Instanzme...

Lösung für Nginx, das nicht zur Upstream-Adresse springt

Vorwort Heute bin ich in Nginx auf ein sehr selts...

Tipps zur Verwendung von DIV-Containern mit fester Höhe in IE6 und IE7

Es gibt viele Unterschiede zwischen IE6 und IE7 in...

SQL-Methode zum Berechnen der Zeitstempeldifferenz

SQL-Methode zum Berechnen der Zeitstempeldifferen...