Learn About

Erweiterte Array-Funktionen

DecisionRules verbessert ständig seine Sammlung fortschrittlicher Funktionen, die für benutzerdefinierte Berechnungen innerhalb von Entscheidungstabellen und Entscheidungbäumen verwendet werden können. In diesem Artikel werden wir uns mit einem spezifischen und sehr nützlichen Typ von Funktionen befassen, die Arrays behandeln.

Erweiterte Array-Funktionen hero image

Ein Array ist eine geordnete Menge von Elementen – numerische Werte, Zeichenfolgen oder komplexere JSON-Objekte. Bei der Verwendung einer Entscheidungstabelle schließen wir oft Arrays in die Eingabedaten ein, z. B. um eine Liste verfügbarer Liefermethoden, Kundenprofile oder Artikel in einem Warenkorb anzugeben. Wir können dann auf das Array innerhalb der Regelbedingungen oder -ergebnisse verweisen und unsere Entscheidungslogik auf dessen Daten basieren. Hier kommen Array-Funktionen ins Spiel.

Lassen Sie uns beim Beispiel der Artikel in einem Warenkorb bleiben und annehmen, dass wir eine einfache Entscheidungstabelle haben, in der wir mit dem Gesamtpreis der Bestellung arbeiten möchten. In einem vereinfachten Fall könnte die Eingabe unserer Entscheidungstabelle wie folgt aussehen.

Stellen Sie sich nun vor, Sie möchten einen Rabatt basierend auf dem Gesamtpreis der Artikel im Warenkorb anwenden. Das können Sie auf jeden Fall tun, aber zuerst müssen Sie die Preise summieren. Hier können Sie von einer Array-Funktion profitieren. In der entsprechenden Zelle innerhalb der Spalte für die Warenkorb-Eingangsvariable wählen Sie den Funktionstyp und geben die folgende Funktion ein.

GT(SUM(ARRAY_PICK({cart}, "price")), 35)

Lassen Sie uns sehen, was das bedeutet. Die ARRAY_PICK-Funktion erhält das Array, das in der Warenkorb-Eingangsvariable übergeben wird, und gibt ein Array von Werten unter dem gewählten Preis-Schlüssel zurück. Zum Beispiel wird die oben angegebene Eingabe das Array [12,28] ergeben. Dieses Array von Preisen wird dann an die SUM-Funktion übergeben, die den Gesamtpreis der Artikel im Warenkorb berechnet. Mit der obigen Eingabe erhalten wir einen Gesamtpreis von 40. Die GT-Funktion überprüft dann einfach, ob der Gesamtpreis größer als 35 ist. Im betrachteten Fall wird das Ergebnis wahr sein, und die Auswertung der entsprechenden Tabellenzeile wird fortgesetzt (wir können beispielsweise den Rabatt zuweisen).

Es ist jetzt klar, dass Array-Funktionen wirklich nützlich sind. Doch sie können viel mehr, als nur Werte innerhalb eines Arrays von Objekten zu summieren. Um die volle Leistungsfähigkeit fortgeschrittener Array-Funktionen zu sehen, lassen Sie uns die drei leistungsstärksten vorstellen.

Array Map

Eine häufige Aufgabe besteht darin, ein Array auf ein anderes abzubilden. Dafür ist ARRAY_MAP gedacht. Angenommen, Sie haben eine Entscheidungstabelle mit den folgenden Eingabedaten.

Stellen Sie sich nun vor, Sie möchten jede der Zahlen im inputArray-Array um eins erhöhen. Das können Sie ganz einfach mit ARRAY_MAP tun. Schreiben Sie einfach den folgenden Code.

ARRAY_MAP({inputArray},"number",{number}+1)

Die ARRAY_MAP-Funktion nimmt drei Argumente: das Array, das abgebildet werden soll, einen Namen für ein benutzerdefiniertes Argument und eine benutzerdefinierte Funktion für dieses Argument. Hier haben wir das benutzerdefinierte Argument "number" genannt und die benutzerdefinierte Funktion ist einfach {number}+1, die die Zahl um eins erhöht. Die ARRAY_MAP-Funktion nimmt jedes Element des inputArray, setzt es auf {number} und wertet die Funktion {number}+1 aus. Das Ergebnis wird dann an das resultierende Array übergeben. Somit wird das Ergebnis dieses Beispiels das Array der Werte [2,3,4] sein.

Array Reduce

Was ist, wenn wir ein Array nicht in ein anderes Array, sondern in einen einzelnen Wert umwandeln möchten? In den meisten Fällen kann dies mit ARRAY_REDUCE erreicht werden. Lassen Sie uns die Eingabedaten aus dem vorherigen Beispiel beibehalten:

Lassen Sie uns versuchen, das Produkt aller Zahlen im Array zu berechnen. Mit ARRAY_REDUCE kann dies sofort erreicht werden.

ARRAY_REDUCE({inputArray},"a","b",{a}*{b})

Beachten Sie, dass ARRAY_REDUCE die Namen von zwei benutzerdefinierten Argumenten benötigt – wir haben sie "a" und "b" genannt – sowie eine benutzerdefinierte Funktion für die beiden Argumente. Für uns ist die benutzerdefinierte Funktion einfach die Multiplikation {a}*{b}. ARRAY_REDUCE durchläuft das gegebene Array und wendet die benutzerdefinierte Funktion nacheinander an. Zuerst nimmt es {a} = 1 und {b} = 2 und erhält {a}*{b} = 2. Dann nimmt es {a} = 2 aus der vorherigen Berechnung und {b} = 3, wodurch {a}*{b} = 6 entsteht. An diesem Punkt endet die Berechnung, da unser inputArray nur drei Elemente hat. Das Ergebnis ist 6, wie erwartet.

Array-Filter

Die letzte Array-Funktion, die wir hier einführen möchten, ist ARRAY_FILTER. Es überrascht nicht, dass sie ein gegebenes Array gemäß einer benutzerdefinierten Filterfunktion filtert. Wir können erneut die gleichen Eingabedaten betrachten:

Angenommen, wir möchten nur die Werte beibehalten, die größer als 1 sind. Dies ist eine perfekte Aufgabe für ARRAY_FILTER. Schreiben Sie einfach Folgendes.

ARRAY_FILTER({inputArray},"number",GT({number},1))

Hier betrachtet die Funktion ARRAY_FILTER jedes Element des inputArray, übergibt es als {number} an die benutzerdefinierte Funktion GT({number},1) und überprüft, ob das Ergebnis wahr ist. Wenn dies der Fall ist, wird das Element in das Ergebnisarray übergeben, andernfalls nicht. Das Ergebnisarray wird daher [2,3] sein, da die erste Zahl den Filter nicht bestanden hat.

Fazit

Array-Funktionen sind ein leistungsstarkes Werkzeug für die Arbeit mit Arrays in Entscheidungstabellen und Entscheidungsbäumen. Das Beispiel mit Artikeln in einem Warenkorb zeigt die grundlegende Verwendung. Neben ARRAY_SUM gibt es weitere ähnliche Funktionen zur Behandlung von Zeichenfolgen oder booleschen Werten. Darüber hinaus gibt es drei spezielle Array-Funktionen, die dank der Möglichkeit, andere Funktionen als Argumente zu übergeben, große Freiheit bieten. Diese ermöglichen es uns, Arrays mit einer benutzerdefinierten Zuordnung auf andere Arrays abzubilden, Arrays basierend auf einem benutzerdefinierten Reducer zu reduzieren oder Arrays gemäß einem benutzerdefinierten Filter zu filtern. Insgesamt bilden die Array-Funktionen ein vielseitiges System zur Behandlung von Arrays, das die häufigsten Anwendungsfälle abdeckt.

Für weitere Details siehe Array Functions in unserer Dokumentation.

Danke fürs Lesen!

Jakub Kaninsky

Jakub Kaninsky

Leitender Entwickler