Array Filters

These are provided in the default filters. Specifically, when TemplateOptions is constructed, these are added via the extension method WithArrayFilters.

Contents

    join

    Joins the elements of an array into a string. Basically proxies string.Join. The method will call ToStringValue on everything in the array, so if they’re not already strings, they’ll get “flattened” into strings.

    {{ "Alec,Gabrielle,Isabella" | split:"," | join: " + " }}
    Alec + Gabrielle + Isabella

    first

    Returns the first element of an array. This just calls the “first” virtual member on the FuildValue input. So it’s not using LINQ or anything behind the scenes. And you can call it on anything, but it will return NilValue for anything except an array.

    {% assign children = "Alec,Gabrielle,Isabella" | split:"," %}
    {{ children | first }}
    Alec

    If you need any other information from the returned element, it’s probably easier to just call the property yourself. This does exactly the same thing.

    {{ children.first.age }}

    last

    Returns the last element of an array. This just calls the “last” virtual member on the FuildValue input, so all the same information provided for “first” (above) applies.

    {% assign children = "Alec,Gabrielle,Isabella" | split:"," %}
    {{ children | last }}
    Isabella

    concat

    Glues two arrays together. Internally, it creates a new List<FluidValue>, adds all the original elements to it, then adds all the first argument’s elements to it.

    {% assign children = "Alec,Gabrielle,Isabella" | split:"," %}
    {% assign pets = "Jersey,Turks,Caicos" | split:"," %}
    
    {{ children | concat:pets | join: ", " }}
    Alec, Gabrielle, Isabella, Jersey, Turks, Caicos.

    map

    Extracts a single expression from all array elements into a new array. It’s the rough equivalent of Select in LINQ.

    context.SetValue("children", new List<Person>() {
      new Person() { Name = "Alec", Age = 27 },
      new Person() { Name = "Gabrielle", Age = 20 },
      new Person() { Name = "Isabella", Age = 17 }
    });
    {{ children | map:"Age" | join:", " }}
    27, 20, 17

    While the expression will usually be a property (as above), internally the filter is calling GetValue on the FluidValue, so it can be anything that will work with that, including virtual member.

    For example, if we were dealing with an array of strings:

    {% assign children = "Alec,Gabrielle,Isabella" | split:"," %}
    
    {{ children | map:"size" | join:", " }}
    4, 9, 8

    reverse

    When called on an array, it returns a new array with the elements in the reverse order.

    {{ children | reverse | join:", " }}
    Isabella, Gabrielle, Alec

    When called on a string, it returns an array of the characters in reverse order. If you output this, it will appear to be a string, but you can actually treat it as an array.

    {{ "Deane" | reverse }}.
    {{ "Deane" | reverse | join: ", " }}.
    enaeD
    e, n, a, e, D

    size

    Calls the size property on the array value.

    {{ children | size }}
    3

    It’s exactly the same as this:

    {{ children.size }}

    sort

    ArrayFilters.Sort

    Returns a new array, sorted either by a supplied expression, or – if you don’t pass an expression in – by whatever the element returns from ToStringValue().

    context.SetValue("children", new List<Person>() {
      new Person() { Name = "Alec", Age = 27 },
      new Person() { Name = "Gabrielle", Age = 20 },
      new Person() { Name = "Isabella", Age = 17 }
    });
    {{ children | sort:"Age" | map:"Name" | join:", " }}
    Isabella, Gabrielle, Alec

    sort_natural

    It’s the same as sort, but when you don’t pass in any arguments, the results of the ToStringValue are case insensitive.

    uniq

    Returns a new array without duplicate values. Internally it’s calling the Distinct LINQ function.

    {% comment %} My youngest is very loud, so she counts twice... {% endcomment %}
    {% assign children = "Alec,Gabrielle,Isabella,Isabella" | split:"," %}
    
    {{ children | uniq | join:", " }}
    Alec, Gabrielle, Isabella

    where

    Filters an array by comparing a member to either (1) a matching value or (2) a boolean true.

    This will return an array of just the people with a Name of “Bob”:

    {{ people | where:"Name","Bob" | map:"Age" | join:", " }}

    This will return an array of just the people who like toasters – where IsToasterphile is a boolean true

    {{ people | where:"IsToasterphile" | map:"Name" | join:", " }}

    This is item #1 in a sequence of 5 items.

    You can use your left/right arrow keys to navigate