Werken met lijsten
SHIPM8 breidt Handlebars uit met een set array-helpers. Verschillende daarvan zijn block helpers — ze creëren een nieuwe binnenste context in plaats van een waarde inline terug te geven, en moeten worden afgesloten met {{/helperName}}.
Een lijst filteren
arrayFilter is een block helper die een array filtert tot alleen de elementen die overeenkomen met een opgegeven zoekterm.
arrayFilter array filterTerm property partialSearch
| Argument | Type | Beschrijving |
|---|---|---|
| array | array | De te filteren array. |
| filterTerm | string | De waarde om op te filteren. |
| property | string | De objecteigenschap om te controleren (alleen nodig voor arrays van objecten). |
| partialSearch | boolean | Optioneel: true staat gedeeltelijke overeenkomsten toe. |
Voorbeeld — exacte overeenkomst
Gegevens:
{
"portCalls": [
{ "port": "Rotterdam", "eta": "2024-03-10" },
{ "port": "Antwerp", "eta": "2024-03-13" },
{ "port": "Rotterdam", "eta": "2024-03-18" }
]
}
Resultaat: 2024-03-10 2024-03-18
Voorbeeld — gedeeltelijke overeenkomst
Resultaat: Rotterdam Amsterdam
Een item opzoeken
arrayFind is een block helper die precies zoals arrayFilter werkt, maar alleen het eerste overeenkomende element teruggeeft.
arrayFind array filterTerm property partialSearch
| Argument | Type | Beschrijving |
|---|---|---|
| array | array | De te doorzoeken array. |
| filterTerm | string | De te zoeken waarde. |
| property | string | De objecteigenschap om te controleren (alleen nodig voor arrays van objecten). |
| partialSearch | boolean | Optioneel: true staat gedeeltelijke overeenkomsten toe. |
Voorbeeld
Gegevens: dezelfde portCalls-array als hierboven, met Hamburg toegevoegd → Resultaat: alleen de ETA voor Hamburg.
Items groeperen
groupBy is een block helper die een array groepeert op basis van een of meer eigenschappen. Er zijn drie uitvoermodi: items (standaard), count en sum.
groupBy array property action actionField decimalSeparator isPropertyJsonPath
| Argument | Type | Beschrijving |
|---|---|---|
| array | array | De te groeperen array. |
| property | string | Eigenschap (of door komma's gescheiden lijst) om op te groeperen. Sleutels worden samengevoegd met _ bij groepen op meerdere eigenschappen. |
| action | string | Optioneel: items (standaard), count of sum. |
| actionField | string | Optioneel: veld om op te sommeren (vereist bij sum). |
| decimalSeparator | string | Optioneel: decimaalscheidingsteken bij het verwerken van sum-waarden. |
| isPropertyJsonPath | boolean | Optioneel: behandel property als een JSON path-expressie (bijv. vessel.type). |
Uitvoervormen:
items → [{ "key": string, "items": any[] }]
count → [{ "key": string, "count": number }]
sum → [{ "key": string, "sum": number }]
Voorbeeld — groeperen op haven (items)
Resultaat:
Rotterdam: 2024-03-10 2024-03-18
Antwerp: 2024-03-13
Hamburg: 2024-03-15
Voorbeeld — aantal aanloopbewegingen per haven tellen
Resultaat:
Rotterdam: 2
Antwerp: 1
Hamburg: 1
Voorbeeld — tonnage sommeren per ladingtype
Gegevens:
{
"shipments": [
{ "cargoType": "Crude Oil", "tonnage": 50000 },
{ "cargoType": "Crude Oil", "tonnage": 30000 },
{ "cargoType": "Iron Ore", "tonnage": 75000 },
{ "cargoType": "LNG", "tonnage": 20000 }
]
}
Resultaat:
Crude Oil: 80000 MT
Iron Ore: 75000 MT
LNG: 20000 MT
Voorbeeld — groeperen op meerdere eigenschappen
Resultaat: Crude Oil_Ocean Star: 50000 MT enz. (sleutel is de waarden samengevoegd met _).
Voorbeeld — groeperen op geneste eigenschap (JSON path)
Gegevens:
{
"shipments": [
{ "vessel": { "type": "Tanker" }, "cargo": "Crude Oil" },
{ "vessel": { "type": "Tanker" }, "cargo": "LNG" },
{ "vessel": { "type": "Bulker" }, "cargo": "Iron Ore" }
]
}
Resultaat:
Tanker: 2 shipment(s)
Bulker: 1 shipment(s)
Een lijst sorteren
sortedArray is een block helper die een array sorteert. Je hebt altijd een binnenste #each nodig om het resultaat af te drukken.
sortedArray array sortField sortNumeric formats
| Argument | Type | Beschrijving |
|---|---|---|
| array | array | De te sorteren array. |
| sortField | string | Veld(en) om op te sorteren, gescheiden door komma's. Zet een ! voor een veld om aflopend te sorteren. |
| sortNumeric | boolean | Optioneel: true voor numerieke sortering (standaard is tekstsortering). |
| formats | string | Optioneel: door komma's gescheiden .NET-formatstrings (één per sorteerveld) die vóór de vergelijking worden toegepast. |
Voorbeeld — sorteren op één veld
Resultaat (oplopende ETA):
- Amsterdam 2024-03-08
- Rotterdam 2024-03-10
- Hamburg 2024-03-15
- Antwerp 2024-03-18
Voorbeeld — sorteren op meerdere velden
Sorteert op cargoType oplopend, daarna op tonnage aflopend binnen elke groep.
Voorbeeld — numerieke sortering
Standaard wordt er als tekst gesorteerd ("9" staat na "10"). Geef 'true' mee als derde argument voor een numerieke sortering.
Samenvoegen tot tekst
Voegt array-elementen samen tot één string met een scheidingsteken. Optioneel kan een benoemd veld uit elk object worden geëxtraheerd.
join array separator fieldName
| Argument | Type | Beschrijving |
|---|---|---|
| array | array | De samen te voegen array. |
| separator | string | String die tussen elk element wordt geplaatst. |
| fieldName | string | Optioneel: veld om uit elk object te extraheren. Opzoeken is hoofdletterongevoelig. |
Voorbeeld
Elementen tellen (lengte)
Geeft het aantal elementen in een array terug.
arrayLength array
| Argument | Type | Beschrijving |
|---|---|---|
| array | array | De te tellen array. |
Voorbeeld
Lijsten samenvoegen (concat)
arrayConcat is een block helper die twee of meer arrays samenvoegt tot één array in de binnenste context.
arrayConcat array1 array2 ...
| Argument | Type | Beschrijving |
|---|---|---|
| array1 | array | De eerste array. |
| array2 | array | De tweede (en eventuele verdere) samen te voegen array. |
Voorbeeld
Gegevens:
{
"northSeaCalls": [
{ "port": "Rotterdam" },
{ "port": "Hamburg" }
],
"atlanticCalls": [
{ "port": "Antwerp" },
{ "port": "Amsterdam" }
]
}
Resultaat: Rotterdam Hamburg Antwerp Amsterdam
Een object herhalen (vanuit object)
arrayFromObject is een block helper die een array aanmaakt van N kopieën van hetzelfde object — handig wanneer je een sjabloonelement wilt herhalen op basis van een numerieke veldwaarde.
arrayFromObject object occurrences
| Argument | Type | Beschrijving |
|---|---|---|
| occurrences | number | Aantal keren dat het object wordt herhaald in de uitvoerarray. |
Voorbeeld
Gegevens: { "cargo": { "type": "Containers", "containerCount": 3 } } → produceert 3 identieke rijen.
Tekst splitsen in een lijst
split is een block helper die een string opsplitst in een array op basis van een of meer scheidingstekens.
split value delimiters keepEmpty
| Argument | Type | Beschrijving |
|---|---|---|
| value | string | De te splitsen string. |
| delimiters | string | Een string waarvan elk afzonderlijk teken als scheidingsteken wordt gebruikt. |
| keepEmpty | boolean | Optioneel: true houdt lege items bij. Standaard: false. |
Voorbeeld
Resultaat: Amsterdam Rotterdam Antwerp
Resultaat: Crude Oil LNG Iron Ore