Mit Listen arbeiten
SHIPM8 erweitert Handlebars um eine Reihe Array-Helfer. Mehrere davon sind Block-Helfer — sie erzeugen einen neuen inneren Kontext, statt einen Wert direkt zurückzugeben, und müssen mit {{/helperName}} geschlossen werden.
Eine Liste filtern
arrayFilter ist ein Block-Helfer, der ein Array auf die Elemente eingrenzt, die zu einem Suchbegriff passen.
arrayFilter array filterTerm property partialSearch
| Argument | Typ | Beschreibung |
|---|---|---|
| array | array | Das zu filternde Array. |
| filterTerm | string | Der Wert, nach dem gefiltert wird. |
| property | string | Die zu prüfende Objekteigenschaft (nur bei Arrays aus Objekten nötig). |
| partialSearch | boolean | Optional: true erlaubt Teiltreffer. |
Beispiel — exakter Treffer
Daten:
{
"portCalls": [
{ "port": "Rotterdam", "eta": "2024-03-10" },
{ "port": "Antwerp", "eta": "2024-03-13" },
{ "port": "Rotterdam", "eta": "2024-03-18" }
]
}
Ergebnis: 2024-03-10 2024-03-18
Beispiel — Teiltreffer
Ergebnis: Rotterdam Amsterdam
Ein Element finden
arrayFind ist ein Block-Helfer, der genau wie arrayFilter arbeitet, aber nur das erste passende Element zurückgibt.
arrayFind array filterTerm property partialSearch
| Argument | Typ | Beschreibung |
|---|---|---|
| array | array | Das zu durchsuchende Array. |
| filterTerm | string | Der gesuchte Wert. |
| property | string | Die zu prüfende Objekteigenschaft (nur bei Arrays aus Objekten nötig). |
| partialSearch | boolean | Optional: true erlaubt Teiltreffer. |
Beispiel
Daten: dasselbe Array wie oben, ergänzt um Hamburg → Ergebnis: nur die ETA für Hamburg.
Elemente gruppieren
groupBy ist ein Block-Helfer, der ein Array nach einer oder mehreren Eigenschaften gruppiert. Er kennt drei Ausgabemodi: items (Standard), count und sum.
groupBy array property action actionField decimalSeparator isPropertyJsonPath
| Argument | Typ | Beschreibung |
|---|---|---|
| array | array | Das zu gruppierende Array. |
| property | string | Eigenschaft (oder kommagetrennte Liste), nach der gruppiert wird. Bei mehreren Eigenschaften werden die Schlüssel mit _ verbunden. |
| action | string | Optional: items (Standard), count oder sum. |
| actionField | string | Optional: das zu summierende Feld (bei sum erforderlich). |
| decimalSeparator | string | Optional: Dezimaltrennzeichen beim Einlesen der sum-Werte. |
| isPropertyJsonPath | boolean | Optional: behandelt property als JSON-Path-Ausdruck, z. B. vessel.type. |
Ausgabeformen:
items → [{ "key": string, "items": any[] }]
count → [{ "key": string, "count": number }]
sum → [{ "key": string, "sum": number }]
Beispiel — nach Hafen gruppieren (items)
Ergebnis:
Rotterdam: 2024-03-10 2024-03-18
Antwerp: 2024-03-13
Hamburg: 2024-03-15
Beispiel — Anläufe je Hafen zählen
Ergebnis:
Rotterdam: 2
Antwerp: 1
Hamburg: 1
Beispiel — Tonnage je Ladungsart summieren
Daten:
{
"shipments": [
{ "cargoType": "Crude Oil", "tonnage": 50000 },
{ "cargoType": "Crude Oil", "tonnage": 30000 },
{ "cargoType": "Iron Ore", "tonnage": 75000 },
{ "cargoType": "LNG", "tonnage": 20000 }
]
}
Ergebnis:
Crude Oil: 80000 MT
Iron Ore: 75000 MT
LNG: 20000 MT
Beispiel — nach mehreren Eigenschaften gruppieren
Ergebnis: Crude Oil_Ocean Star: 50000 MT usw. (der Schlüssel sind die mit _ verbundenen Werte).
Beispiel — nach verschachtelter Eigenschaft gruppieren (JSON-Path)
Daten:
{
"shipments": [
{ "vessel": { "type": "Tanker" }, "cargo": "Crude Oil" },
{ "vessel": { "type": "Tanker" }, "cargo": "LNG" },
{ "vessel": { "type": "Bulker" }, "cargo": "Iron Ore" }
]
}
Ergebnis:
Tanker: 2 shipment(s)
Bulker: 1 shipment(s)
Eine Liste sortieren
sortedArray ist ein Block-Helfer, der ein Array sortiert. Zum Ausgeben brauchen Sie immer ein inneres #each.
sortedArray array sortField sortNumeric formats
| Argument | Typ | Beschreibung |
|---|---|---|
| array | array | Das zu sortierende Array. |
| sortField | string | Feld oder Felder, nach denen sortiert wird, kommagetrennt. Ein ! davor sortiert absteigend. |
| sortNumeric | boolean | Optional: true für numerische Sortierung (Standard ist Textsortierung). |
| formats | string | Optional: kommagetrennte .NET-Formate, eines je Sortierfeld, vor dem Vergleich angewendet. |
Beispiel — nach einem Feld
Ergebnis (ETA aufsteigend):
- Amsterdam 2024-03-08
- Rotterdam 2024-03-10
- Hamburg 2024-03-15
- Antwerp 2024-03-18
Beispiel — nach mehreren Feldern
Sortiert nach cargoType aufsteigend, innerhalb jeder Gruppe nach tonnage absteigend.
Beispiel — numerisch sortieren
Standardmäßig wird als Text sortiert ("9" steht dann hinter "10"). Übergeben Sie 'true' als drittes Argument für eine numerische Sortierung.
Zu Text zusammenfügen
Fügt die Elemente eines Arrays mit einem Trennzeichen zu einer Zeichenfolge zusammen. Wahlweise wird aus jedem Objekt ein benanntes Feld herausgezogen.
join array separator fieldName
| Argument | Typ | Beschreibung |
|---|---|---|
| array | array | Das zusammenzufügende Array. |
| separator | string | Zeichenfolge zwischen den Elementen. |
| fieldName | string | Optional: das Feld, das aus jedem Objekt gezogen wird. Groß-/Kleinschreibung spielt keine Rolle. |
Beispiel
Elemente zählen (Länge)
Gibt die Anzahl der Elemente eines Arrays zurück.
arrayLength array
| Argument | Typ | Beschreibung |
|---|---|---|
| array | array | Das zu zählende Array. |
Beispiel
Listen zusammenführen (concat)
arrayConcat ist ein Block-Helfer, der zwei oder mehr Arrays im inneren Kontext zu einem einzigen zusammenführt.
arrayConcat array1 array2 ...
| Argument | Typ | Beschreibung |
|---|---|---|
| array1 | array | Das erste Array. |
| array2 | array | Das zweite (und jedes weitere) Array. |
Beispiel
Daten:
{
"northSeaCalls": [
{ "port": "Rotterdam" },
{ "port": "Hamburg" }
],
"atlanticCalls": [
{ "port": "Antwerp" },
{ "port": "Amsterdam" }
]
}
Ergebnis: Rotterdam Hamburg Antwerp Amsterdam
Ein Objekt wiederholen (aus Objekt)
arrayFromObject ist ein Block-Helfer, der ein Array aus N Kopien desselben Objekts erzeugt — praktisch, wenn Sie ein Vorlagenelement anhand eines Zahlenfelds wiederholen wollen.
arrayFromObject object occurrences
| Argument | Typ | Beschreibung |
|---|---|---|
| occurrences | number | Wie oft das Objekt im Ausgabe-Array wiederholt wird. |
Beispiel
Daten: { "cargo": { "type": "Containers", "containerCount": 3 } } → ergibt 3 identische Zeilen.
Text in eine Liste aufteilen
split ist ein Block-Helfer, der eine Zeichenfolge an einem oder mehreren Trennzeichen in ein Array zerlegt.
split value delimiters keepEmpty
| Argument | Typ | Beschreibung |
|---|---|---|
| value | string | Die zu zerlegende Zeichenfolge. |
| delimiters | string | Eine Zeichenfolge, deren einzelne Zeichen jeweils als Trennzeichen gelten. |
| keepEmpty | boolean | Optional: true behält leere Einträge. Standard: false. |
Beispiel
Ergebnis: Amsterdam Rotterdam Antwerp
Ergebnis: Crude Oil LNG Iron Ore