The TwoVarComprehensions extension introduces support for comprehensions that use two variables (typically an index/key and a value). This allows for more complex transformations and predicates on lists and maps.
all
Tests if all elements satisfy a predicate. Short-circuits on false.
<list>.all(indexVar, valueVar, <predicate>) -> bool<map>.all(keyVar, valueVar, <predicate>) -> bool
exists
Tests if any element satisfies a predicate. Short-circuits on true.
<list>.exists(indexVar, valueVar, <predicate>) -> bool<map>.exists(keyVar, valueVar, <predicate>) -> bool
exists_one
Tests if exactly one element satisfies a predicate. Does not short-circuit.
<list>.existsOne(indexVar, valueVar, <predicate>)<map>.existsOne(keyVar, valueVar, <predicate>)
transformList
Converts a list or map into a new list. Supports optional filtering.
<list>.transformList(indexVar, valueVar, <transform>)<list>.transformList(indexVar, valueVar, <filter>, <transform>)<map>.transformList(keyVar, valueVar, <transform>)<map>.transformList(keyVar, valueVar, <filter>, <transform>)
transformMap
Converts a list or map into a new map. The key remains fixed from the source, while the value is transformed. Supports optional filtering.
<list>.transformMap(indexVar, valueVar, <transform>)<list>.transformMap(indexVar, valueVar, <filter>, <transform>)<map>.transformMap(keyVar, valueVar, <transform>)<map>.transformMap(keyVar, valueVar, <filter>, <transform>)
transformMapEntry
Converts a list or map into a new map where the transform expression must be a map literal (e.g., {key: value}). If the transform produces duplicate keys, it will error.
<list>.transformMapEntry(indexVar, valueVar, <transform>)<list>.transformMapEntry(indexVar, valueVar, <filter>, <transform>)<map>.transformMapEntry(keyVar, valueVar, <transform>)<map>.transformMapEntry(keyVar, valueVar, <filter>, <transform>)
// all example
[1, 2, 3].all(i, j, i < j) // true
// transformList example
[1, 2, 3].transformList(i, v, (i * v) + v) // [1, 4, 9]
// transformMapEntry example
{'greeting': 'hello'}.transformMapEntry(k, v, {v: k}) // {'hello': 'greeting'}