Skip to main content

$$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 -&gt; array

Arguments​

ArgumentTypeValuesRequired / Default ValueDescription
PrimaryarrayYesArray of elements
byTransformer(##current)YesA transformer to extract a property to group by
  • ##current - Current element
orderenumASC/ DESCASCDirection of ordering (ascending / descending)
typeenumAUTO/ STRING/NUMBER/BOOLEANAUTOType of values to expect when ordering the input array
thenarraynullAn array of subsequent grouping. When previous sort had no difference (only when by specified) \{ &quot;by&quot;: ..., &quot;order&quot;: ..., &quot;type&quot;: ...} // 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"
}
]
}