$$group
Groups an array of entries into a map of key -> array
by a specified transformer (with optional nested grouping)
Sorts elements of an array
Usage​
{
"$$group": /* Array of elements */,
"by": /* Transformer(##current) */,
"order": "ASC" /* or DESC */,
"type": "AUTO" /* or STRING / NUMBER / BOOLEAN */,
"then": /* array */
}
"$$group(<by>,[order],[type],[then]):{input}"
note
Concrete values in the usage example are default values.
Returns​
Map of key -> array
Arguments​
Argument | Type | Values | Required / Default Value | Description |
---|---|---|---|---|
Primary | array | Yes | Array of elements | |
by | Transformer(##current ) | Yes | A transformer to extract a property to group by
| |
order | enum | ASC / DESC | ASC | Direction of ordering (ascending / descending) |
type | enum | AUTO / STRING /NUMBER /BOOLEAN | AUTO | Type of values to expect when ordering the input array |
then | array | null | An array of subsequent grouping. When previous sort had no difference (only when by specified)Â \{ "by": ..., "order": ..., "type": ...} // same 3 fields as above (by is required) |
Examples​
Input
Definition
Output
[
{
"o": 1,
"p": 11,
"w": "aaa"
},
{
"o": 1,
"p": 13,
"w": "bbb"
},
{
"o": 1,
"p": 11,
"w": "ccc"
},
{
"o": 2,
"p": 11,
"w": "ddd"
},
{
"o": 2,
"p": 13,
"w": "eee"
},
{
"o": 3,
"p": 12,
"w": "fff"
},
{
"o": 1,
"p": 9,
"w": "zzz"
},
{
"no_o": false,
"p": 9,
"w": "zzz"
}
]
"$$group(##current.o):$"
{
"1": [
{
"o": 1,
"p": 11,
"w": "aaa"
},
{
"o": 1,
"p": 13,
"w": "bbb"
},
{
"o": 1,
"p": 11,
"w": "ccc"
},
{
"o": 1,
"p": 9,
"w": "zzz"
}
],
"2": [
{
"o": 2,
"p": 11,
"w": "ddd"
},
{
"o": 2,
"p": 13,
"w": "eee"
}
],
"3": [
{
"o": 3,
"p": 12,
"w": "fff"
}
],
"": [
{
"no_o": false,
"p": 9,
"w": "zzz"
}
]
}
[
[
"a",
0,
1
],
[
"a",
1,
true
],
[
"a",
2,
"C"
],
[
"b",
1,
6
]
]
"$$group(##current[0]):$"
{
"a": [
[
"a",
0,
1
],
[
"a",
1,
true
],
[
"a",
2,
"C"
]
],
"b": [
[
"b",
1,
6
]
]
}
null
"$$group"
{}
0.5
"$$group(##current[0]):$"
{}
"test"
"$$group(##current[0]):$"
{}
false
"$$group:$"
{}
[
{
"o": 1,
"p": 11,
"w": "aaa"
},
{
"o": 1,
"p": 13,
"w": "bbb"
},
{
"o": 1,
"p": 11,
"w": "ccc"
},
{
"o": 2,
"p": 11,
"w": "ddd"
},
{
"o": 2,
"p": 13,
"w": "eee"
},
{
"o": 3,
"p": 12,
"w": "fff"
},
{
"o": 1,
"p": 9,
"w": "zzz"
},
{
"no_o": false,
"p": 9,
"w": "zzz"
}
]
{
"$$group": "$",
"by": "##current.o",
"then": [
{
"by": {
"$$join": [
"p_",
"##current.p"
]
},
"order": "DESC"
}
]
}
{
"1": {
"p_9": [
{
"o": 1,
"p": 9,
"w": "zzz"
}
],
"p_13": [
{
"o": 1,
"p": 13,
"w": "bbb"
}
],
"p_11": [
{
"o": 1,
"p": 11,
"w": "aaa"
},
{
"o": 1,
"p": 11,
"w": "ccc"
}
]
},
"2": {
"p_13": [
{
"o": 2,
"p": 13,
"w": "eee"
}
],
"p_11": [
{
"o": 2,
"p": 11,
"w": "ddd"
}
]
},
"3": {
"p_12": [
{
"o": 3,
"p": 12,
"w": "fff"
}
]
},
"": {
"p_9": [
{
"no_o": false,
"p": 9,
"w": "zzz"
}
]
}
}
null
{
"$$group": "$"
}
{}
0.5
{
"$$group": "$"
}
{}
false
{
"$$group": "$"
}
{}
[
{
"o": 1,
"p": 11,
"w": "aaa"
},
{
"o": 1,
"p": 13,
"w": "bbb"
},
{
"o": 1,
"p": 11,
"w": "ccc"
},
{
"o": 2,
"p": 11,
"w": "ddd"
},
{
"o": 2,
"p": 13,
"w": "eee"
},
{
"o": 3,
"p": 12,
"w": "fff"
},
{
"o": 1,
"p": 9,
"w": "zzz"
},
{
"no_o": false,
"p": 9,
"w": "zzz"
}
]
{
"$$group": "$",
"by": {
"$$join": [
"##current.o",
"##current.p"
]
}
}
{
"9": [
{
"no_o": false,
"p": 9,
"w": "zzz"
}
],
"19": [
{
"o": 1,
"p": 9,
"w": "zzz"
}
],
"111": [
{
"o": 1,
"p": 11,
"w": "aaa"
},
{
"o": 1,
"p": 11,
"w": "ccc"
}
],
"113": [
{
"o": 1,
"p": 13,
"w": "bbb"
}
],
"211": [
{
"o": 2,
"p": 11,
"w": "ddd"
}
],
"213": [
{
"o": 2,
"p": 13,
"w": "eee"
}
],
"312": [
{
"o": 3,
"p": 12,
"w": "fff"
}
]
}