This page is part of a static HTML representation of the TiddlyWiki at https://tiddlywiki.com/

reduce Operator

21st March 2023 at 1:39pm
purposeapply a subfilter to each input title in turn, accumulating a single value
inputa selection of titles passed as input to the filter
parameterS=a filter expression. Optional second parameter for initial value for accumulator
outputthe final result of running the subfilter S

Learn more about how to use Filters

Introduced in v5.1.23 The reduce operator runs a subfilter for each input title, passing the result of the previous subfilter run as a variable. The initial value of the accumulator can optionally be specified. It returns the result of the final subfilter run.

The reduce operator is used to flatten a list of items down to a single item by repeatedly applying a formula. A typical use is to add up the values in a given field of a list of tiddlers.

The following variables are available within the subfilter:

  • accumulator - the result of the previous subfilter run
  • currentTiddler - the input title
  • ..currentTiddler - the value of the variable currentTiddler outside the subfilter. Introduced in v5.2.0
  • index - the numeric index of the current list item (with zero being the first item in the list)
  • revIndex - the reverse numeric index of the current list item (with zero being the last item in the list)
  • length - the total length of the input list

If the reduce operator receives no input, its output will be empty. The else Operator can be useful in such cases.

Tip
Literal filter parameters cannot contain square brackets but you can work around the issue by using a variable:

<$set name="sum-input" value="[add<accumulator>]">
{{{ =1 =2 =3 +[reduce<sum-input>] }}}
</$set>

Tip
Compare with the analogous named filter run prefix :reduce

\define num-items() [get[quantity]add<accumulator>]

[tag[shopping]reduce<num-items>]

is equivalent to:

[tag[shopping]] :reduce[get[quantity]add<accumulator>]

Tip
If the optional second parameter is not given, the initial accumulator value will be empty. Numerical operators treat empty input as if it was the number 0. See the multiply-input examples for how this can affect the result of reduce in some cases.

Examples