$map(array, function)

Returns an array containing the results of applying the function parameter to each value in the array parameter.

The function that is supplied as the second parameter must have the following signature:

function(value [, index [, array]])

Each value in the input array is passed in as the first parameter in the supplied function. The index (position) of that value in the input array is passed in as the second parameter, if specified. The whole input array is passed in as the third parameter, if specified.

Examples
$map([1..5], $string) => ["1", "2", "3", "4", "5"]

With user-defined (lambda) function:

$map(Email.address, function($v, $i, $a) {
   'Item ' & ($i+1) & ' of ' & $count($a) & ': ' & $v
})

evaluates to:

[
  "Item 1 of 4: fred.smith@my-work.com",
  "Item 2 of 4: fsmith@my-work.com",
  "Item 3 of 4: freddy@my-social.com",
  "Item 4 of 4: frederic.smith@very-serious.com"
]

$filter(array, function)

Returns an array containing only the values in the array parameter that satisfy the function predicate (i.e. function returns Boolean true when passed the value).

The function that is supplied as the second parameter must have the following signature:

function(value [, index [, array]])

Each value in the input array is passed in as the first parameter in the supplied function. The index (position) of that value in the input array is passed in as the second parameter, if specified. The whole input array is passed in as the third parameter, if specified.

Example
The following expression returns all the products whose price is higher than average:

$filter(Account.Order.Product, function($v, $i, $a) {
  $v.Price > $average($a.Price)
})

$reduce(array, function [, init])

Returns an aggregated value derived from applying the function parameter successively to each value in array in combination with the result of the previous application of the function.

The function must accept two arguments, and behaves like an infix operator between each value within the array.

Example

(
  $product := function($i, $j){$i * $j};
  $reduce([1..5], $product)
)

This multiplies all the values together in the array [1..5] to return 120.

If the optional init parameter is supplied, then that value is used as the initial value in the aggregation (fold) process. If not supplied, the initial value is the first value in the array parameter.

$sift(object, function)

Returns an object that contains only the key/value pairs from the object parameter that satisfy the predicate function passed in as the second parameter.

If object is not specified, then the context value is used as the value of object. It is an error if object is not an object.

The function that is supplied as the second parameter must have the following signature:

function(value [, key [, object]])

Each value in the input object is passed in as the first parameter in the supplied function. The key (property name) of that value in the input object is passed in as the second parameter, if specified. The whole input object is passed in as the third parameter, if specified.

Example

Account.Order.Product.$sift(function($v, $k) {$k ~> /^Product/})

This sifts each of the Product objects such that they only contain the fields whose keys start with the string “Product” (using a regex). This example returns:

[
  {
    "Product Name": "Bowler Hat",
    "ProductID": 858383
  },
  {
    "Product Name": "Trilby hat",
    "ProductID": 858236
  },
  {
    "Product Name": "Bowler Hat",
    "ProductID": 858383
  },
  {
    "ProductID": 345664,
    "Product Name": "Cloak"
  }
]