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

reduce Operator

8th December 2020 at 6:51pm
Filter Operators
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

New in: 5.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
  • 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.

Literal filter operands 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>

Compare with the analagous 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>]

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