Skip to main content

$reduce

$reduce(array, function, init?) -> value
Compact type signature<afj?:j>

Source: JSONata

Documentation

Reduces a sequence from left to right into a single accumulated result.

The reducer must accept at least an accumulator and the current item or FUME throws D3050. If init is omitted and the sequence is non-empty, the first item becomes the initial accumulator and reduction starts from the second item. Reducers with higher arity also receive the current index and the full input sequence.

undefined input returns undefined.

Examples

Reduce claim lines into a total

Input

This example uses the claims-lines example input. The expression reduces the claim lines down to one total.

Example input

JSON
[
{
"claimId": "clm-2001",
"lineNumber": 1,
"serviceCode": "PROC-010",
"serviceDisplay": "office visit",
"units": 1,
"unitPrice": 125,
"allowedAmount": 110,
"modifiers": [
"MOD-A"
]
},
{
"claimId": "clm-2001",
"lineNumber": 2,
"serviceCode": "PROC-020",
"serviceDisplay": "imaging study",
"units": "1",
"unitPrice": 350,
"allowedAmount": 300,
"modifiers": [
"MOD-B",
"MOD-C"
]
},
{
"claimId": "clm-2001",
"lineNumber": 3,
"serviceCode": "PROC-030",
"serviceDisplay": "lab panel",
"units": 2,
"unitPrice": 40,
"allowedAmount": 70,
"modifiers": []
},
{
"claimId": "clm-2002",
"lineNumber": 1,
"serviceCode": "PROC-010",
"serviceDisplay": "office visit",
"units": 1,
"unitPrice": 125,
"allowedAmount": 115,
"modifiers": [
"MOD-A"
]
},
{
"claimId": "clm-2002",
"lineNumber": 2,
"serviceCode": "PROC-040",
"serviceDisplay": "counseling",
"units": 3,
"unitPrice": 60,
"allowedAmount": 150,
"modifiers": [
"MOD-D"
]
}
]

Expression

$reduce($, function($acc, $l) { $acc + $l.allowedAmount }, 0)

Result

745