Zum Hauptinhalt springen

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
ArgumentTypBeschreibung
arrayarrayDas zu filternde Array.
filterTermstringDer Wert, nach dem gefiltert wird.
propertystringDie zu prüfende Objekteigenschaft (nur bei Arrays aus Objekten nötig).
partialSearchbooleanOptional: true erlaubt Teiltreffer.

Beispiel — exakter Treffer

{{#arrayFilter portCalls 'Rotterdam' 'port'}}
{{#each this}}{{eta}} {{/each}}
{{/arrayFilter}}

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

{{#arrayFilter portCalls 'dam' 'port' 'true'}}
{{#each this}}{{port}} {{/each}}
{{/arrayFilter}}

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
ArgumentTypBeschreibung
arrayarrayDas zu durchsuchende Array.
filterTermstringDer gesuchte Wert.
propertystringDie zu prüfende Objekteigenschaft (nur bei Arrays aus Objekten nötig).
partialSearchbooleanOptional: true erlaubt Teiltreffer.

Beispiel

{{#arrayFind portCalls 'Hamburg' 'port'}}
{{eta}}
{{/arrayFind}}

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
ArgumentTypBeschreibung
arrayarrayDas zu gruppierende Array.
propertystringEigenschaft (oder kommagetrennte Liste), nach der gruppiert wird. Bei mehreren Eigenschaften werden die Schlüssel mit _ verbunden.
actionstringOptional: items (Standard), count oder sum.
actionFieldstringOptional: das zu summierende Feld (bei sum erforderlich).
decimalSeparatorstringOptional: Dezimaltrennzeichen beim Einlesen der sum-Werte.
isPropertyJsonPathbooleanOptional: 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)

{{#groupBy portCalls 'port'}}
{{#each this}}
{{key}}: {{#each items}}{{eta}} {{/each}}
{{/each}}
{{/groupBy}}

Ergebnis:

Rotterdam: 2024-03-10 2024-03-18
Antwerp: 2024-03-13
Hamburg: 2024-03-15

Beispiel — Anläufe je Hafen zählen

{{#groupBy portCalls 'port' 'count'}}
{{#each this}}{{key}}: {{count}}
{{/each}}
{{/groupBy}}

Ergebnis:

Rotterdam: 2
Antwerp: 1
Hamburg: 1

Beispiel — Tonnage je Ladungsart summieren

{{#groupBy shipments 'cargoType' 'sum' 'tonnage'}}
{{#each this}}{{key}}: {{sum}} MT
{{/each}}
{{/groupBy}}

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

{{#groupBy shipments 'cargoType,vessel' 'sum' 'tonnage'}}
{{#each this}}{{key}}: {{sum}} MT
{{/each}}
{{/groupBy}}

Ergebnis: Crude Oil_Ocean Star: 50000 MT usw. (der Schlüssel sind die mit _ verbundenen Werte).

Beispiel — nach verschachtelter Eigenschaft gruppieren (JSON-Path)

{{#groupBy shipments 'vessel.type' '' '' '' 'true'}}
{{#each this}}{{key}}: {{items.length}} shipment(s)
{{/each}}
{{/groupBy}}

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
ArgumentTypBeschreibung
arrayarrayDas zu sortierende Array.
sortFieldstringFeld oder Felder, nach denen sortiert wird, kommagetrennt. Ein ! davor sortiert absteigend.
sortNumericbooleanOptional: true für numerische Sortierung (Standard ist Textsortierung).
formatsstringOptional: kommagetrennte .NET-Formate, eines je Sortierfeld, vor dem Vergleich angewendet.

Beispiel — nach einem Feld

{{#sortedArray portCalls 'eta'}}
{{#each this}}
- {{port}} {{eta}}
{{/each}}
{{/sortedArray}}

Ergebnis (ETA aufsteigend):

- Amsterdam 2024-03-08
- Rotterdam 2024-03-10
- Hamburg 2024-03-15
- Antwerp 2024-03-18

Beispiel — nach mehreren Feldern

{{#sortedArray shipments 'cargoType,!tonnage'}}
{{#each this}}{{cargoType}} {{tonnage}} | {{/each}}
{{/sortedArray}}

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.

{{#sortedArray shipments 'tonnage' 'true'}}
{{#each this}}{{vessel}}: {{tonnage}} | {{/each}}
{{/sortedArray}}

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
ArgumentTypBeschreibung
arrayarrayDas zusammenzufügende Array.
separatorstringZeichenfolge zwischen den Elementen.
fieldNamestringOptional: das Feld, das aus jedem Objekt gezogen wird. Groß-/Kleinschreibung spielt keine Rolle.

Beispiel

{{join ports ', '}}                    => Amsterdam, Rotterdam, Antwerp
{{join portCalls ' → ' 'port'}} => Amsterdam → Rotterdam → Antwerp

Elemente zählen (Länge)

Gibt die Anzahl der Elemente eines Arrays zurück.

arrayLength array
ArgumentTypBeschreibung
arrayarrayDas zu zählende Array.

Beispiel

{{arrayLength portCalls}}    => 4
{{arrayLength shipments}} => 3

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 ...
ArgumentTypBeschreibung
array1arrayDas erste Array.
array2arrayDas zweite (und jedes weitere) Array.

Beispiel

{{#arrayConcat northSeaCalls atlanticCalls}}
{{#each this}}{{port}} {{/each}}
{{/arrayConcat}}

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
ArgumentTypBeschreibung
occurrencesnumberWie oft das Objekt im Ausgabe-Array wiederholt wird.

Beispiel

{{#arrayFromObject cargo cargo.containerCount}}
{{#each this}}
- Container ({{type}})
{{/each}}
{{/arrayFromObject}}

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
ArgumentTypBeschreibung
valuestringDie zu zerlegende Zeichenfolge.
delimitersstringEine Zeichenfolge, deren einzelne Zeichen jeweils als Trennzeichen gelten.
keepEmptybooleanOptional: true behält leere Einträge. Standard: false.

Beispiel

{{#split 'Amsterdam,Rotterdam,Antwerp' ','}}
{{#each this}}{{this}} {{/each}}
{{/split}}

Ergebnis: Amsterdam Rotterdam Antwerp

{{#split 'Crude Oil;LNG|Iron Ore' ';|'}}
{{#each this}} {{this}}{{/each}}
{{/split}}

Ergebnis: Crude Oil LNG Iron Ore