Tableaux
Typeflow n'a pas de boucles — le travail sur les tableaux se fait avec quatre constructions postfixes (distribution, [filtre], [index], ^(tri)) plus la projection et les fonctions d'agrégation.
| Opérateur | Effet |
|---|---|
. | distribuer un accès de propriété sur les éléments d'un tableau |
[bool] | conserver les éléments satisfaisant un prédicat booléen |
[number] | accéder à un élément par index |
^(key) | trier les éléments selon une ou plusieurs clés |
count / sum / join | réduire un tableau à un scalaire |
. : distribuer un accès de propriété sur les éléments d'un tableau
Accéder à une propriété sur un tableau d'objets distribue sur les éléments — labels.name sur { name: string }[] produit string[].
names: user.labels.name[bool] : conserver les éléments satisfaisant un prédicat booléen
Une expression booléenne entre crochets conserve les éléments correspondants. Entre les crochets, on est en portée d'élément : les identifiants nus se résolvent sur l'élément. Le prédicat doit être booléen — user.labels[name] est rejeté (TF2009).
active: user.labels[active]
activeNames: user.labels[active].name[number] : accéder à un élément par index
L'indexation produit element | undefined (le tableau peut être plus court), donc tout accès ultérieur nécessite ?..
first: user.labels[0]
firstName: user.labels[0]?.name
firstOr: user.labels[0]?.name ?? "none"^(key) : trier les éléments selon une ou plusieurs clés
Trie une copie du tableau selon chaque clé tour à tour. Les clés sont des expressions en portée d'élément ; préfixer une clé par > pour un tri descendant (< ou rien pour ascendant). Une clé doit être un number ou une string (TF2011) ; les clés nullish sont triées en dernier.
alphabetical: user.labels^(name).name
bestFirst: user.labels^(>score, name)count / sum / join : réduire un tableau à un scalaire
Voir Fonctions pour la liste complète des agrégats.
games: count(stats.scores)
total: sum(stats.scores)
tagLine: join(stats.tags, ", ")Playground
{ "games": 3, "total": 42, "tagLine": "math, pioneer" }
{ games: number; total: number; tagLine: string }Suite : Projection.