Array formulas
These formulas are very useful to manipulate arrays, like changing their content, filtering them, etc.
💡 Good to know 💡
These formulas won't replace the array they're using on but will always return a new one. To replace the array by its new value, you should use a workflow to store the returned result as the new content of the array.
add
This formula will add one or multiple values at the end of an existing array. It's the JavaScript equivalent of push
.
Example
In this example, we have a variable countries
which equals to ["France", "USA"]
, so an array of strings containing the countries where WeWeb employees live. But we're missing some countries! To solve this, we'll use the add
formula to add two new countries.
contains
This formula will check if a value exist in a given array. It always returns a boolean, meaning it will either return true
or false
.
Example
Let's get back to our countries
array variable, which now equals ["France", "USA", "Belgium", "Croatia"]
. If we use the contains
formula with this array and "France"
, it will return true
. With "Canada"
, it returns false
, as Canada isn't in the list of countries.
createArray
The createArray
formula is useful to create a whole array from scratch, without any code. It's the equivalent of writing the whole array in JavaScript.
Example
Let's say we want to create the countries
array (containing the places where WeWeb employees live, meaning ["France", "USA", "Belgium", "Croatia"]
) in a workflow, without needing to type any JavaScript. To do this, we would write this formula:
compare
This formula will compare that two arrays are equals. Meaning they both have the same values and that their values are in the same order (same index for each). This formula always returns a boolean, which means true
or false
.
Example
If we take our countries
array which contain ["France", "USA", "Belgium", "Croatia"]
, compare
will return true
or false
in these use-cases:
- same values, same order ->
true
- same values, different order ->
false
- different values ->
false
distinct
distinct
iterates over the values in an array, and will return a new array with only unique values. Meaning that if a value is present twice or more in the array, it will be returned only once.
Example
Let's say we have an array with WeWeb employees names, but we wrote one of them twice by mistake. By using the distinct
formula, we're able to correct this mistake.
filterByKey
This formula will iterate over an array of objects, and return an array where only the object's with a certain key have a certain value.
It seems hard to understand like that, I know... But check the example and it'll become super clear 😉
Example
Let's say we have an array of users with objects containing their names and role in the web app:
json
[
{"name": "Quentin", "role": "admin"},
{"name": "Joyce", "role": "normal"},
{"name": "Aurélie", "role": "admin"},
{"name": "Kévin", "role": "normal"}
]
We want to filter this array to only have users who are admins. We can do this easily with the filterByKey
formula:
Learn more about the filterByKey
formula in this video tutorial.
findIndex
findIndex
, when given and array and a value, will find the index in the array of the first element which equals the given value. If the value isn't found, it will return -1
. It's equivalent to JavaScript's indexOf
.
🔥 Pro tip 🔥
Array indexes begin at 0, not 1.
Example
If we take the countries
array, which includes ["France", "USA", "Belgium", "Croatia"]
, it will return 2
when we use findIndex
for "Belgium"
, -1
for "Germany"
as it's not in the array.
findIndexByKey
This formula is equivalent to the findIndex
formula but for arrays of objects. It'll return the index of the first object in the array whose key is equal to value.
Example
Let's get back to our array of users with objects containing their names and role in the web app:
json
[
{"name": "Quentin", "role": "admin"},
{"name": "Joyce", "role": "normal"},
{"name": "Aurélie", "role": "admin"},
{"name": "Kévin", "role": "normal"}
]
If we try to find the first object whose "role"
equals to "normal"
, we'll get the index 1
(the second object). We'll get the index 2
to match on "name"
equals "Aurélie"
and -1
when matching on "John"
as this name doesn't exist in the array.
getByIndex
This formula will return an element in a array at a specific index.
Example
Let's get back to our array of users with objects containing their names and role in the web app:
json
[
{"name": "Quentin", "role": "admin"},
{"name": "Joyce", "role": "normal"},
{"name": "Aurélie", "role": "admin"},
{"name": "Kévin", "role": "normal"}
]
If we use getByIndex
on the second index, we'll get back Aurélie's object.
groupBy
groupBy
, when given an array of objects, will return a new array where objects are grouped by their value for a given key.
Example
Again, we go back to our array of users with objects containing their names and role in the web app:
json
[
{"name": "Quentin", "role": "admin"},
{"name": "Joyce", "role": "normal"},
{"name": "Aurélie", "role": "admin"},
{"name": "Kévin", "role": "normal"}
]
Let's say we want to regroup them by role type (admins together and normal users together). We can use the groupBy
formula applied on the "role"
key for this.
join
This formula will join all the elements of an array into a string, separating them by a separator (optional, ,
by default). It's equivalent to JavaScript's join
.
Example
Say we want to write a string telling people where WeWeb employees live, using the countries
array which equals to ["France", "USA", "Belgium", "Croatia"]
. We can easily do this with string concatenation and join
.
length
It will return the length of an array, meaning the number of items inside it. Same as JavaScript's length
.
Example
Using it again on countries
which is ["France", "USA", "Belgium", "Croatia"]
, length will return 4
as there's four countries in this array.
lookup
Given an array of objects, this formula will return the first object where the key equals to a value. The key is optional, and equals "id"
by default. It's equivalent of using getByIndex
and findByIndex
together.
💡 Good to know 💡
This formula is very useful to link two arrays together when they are linked by a one-to-one relationship or one-to-many relationship in a database. One example is when you want to link two different Airtable records which are also linked by a lookup inside Airtable.
Example
Let's say, that in our users
array, we want to find back the one for Aurélie. We can do this using the lookup
formula.
As a reminder, here the array:
json
[
{"name": "Quentin", "role": "admin"},
{"name": "Joyce", "role": "normal"},
{"name": "Aurélie", "role": "admin"},
{"name": "Kévin", "role": "normal"}
]
Also, small example with getByIndex
used with findByIndex
.
lookupArray
Same as lookup
, but will match an array of values and return all the objects where the value is in the array of values for a given key.
🔥 Pro tip 🔥
This formula is very useful to link two arrays together when they are linked by a many-to-many relationship in a database. One example is when you want to link more than two different Airtable records which are linked by a lookup inside Airtable.
Example
Let's say we improve our users
array with a new member, Raphael, who's a "superAdmin"
:
json
[
{ "name": "Quentin", "role": "admin" },
{ "name": "Joyce", "role": "normal" },
{ "name": "Aurélie", "role": "admin" },
{ "name": "Kévin", "role": "normal" },
{ "name": "Raphael", "role": "superAdmin" }
]
If we wanted to get only users that are either admins or super admins, we would use the lookupArray
formula.
map
Given an array of objects, this formula will return an array with only the selected key(s) from each object.
Example
Again, we take our users
array of objects:
json
[
{ "name": "Quentin", "role": "admin" },
{ "name": "Joyce", "role": "normal" },
{ "name": "Aurélie", "role": "admin" },
{ "name": "Kévin", "role": "normal" },
{ "name": "Raphael", "role": "superAdmin" }
]
If we wanted to get an array of the users' names only, we would use the map
formula like so:
merge
Given two or more arrays, the merge
formula will return a single array containing all the former arrays.
Example
Let's say we have two arrays with these values:
js
// countries array
[
"France",
"USA",
"Belgium",
"Croatia"
]
// countries2 array
[
"Germany",
"India",
"Japan"
]
The result of merging those two arrays will give a bigger array containing all the countries:
prepend
The prepend
formula adds one or more values at the beginning of a given array.
Example
Let's say we have a countries
array with the following values:
js
// countries array
[
"France",
"USA",
"Belgium",
"Croatia"
]
By prepending "Germany"
to it, we'll get this result:
remove
This formula will remove a given value from an array.
Example
Still with our countries
array as an example:
js
// countries array
[
"France",
"USA",
"Belgium",
"Croatia"
]
Here's what happens when removing "USA"
from it:
removeByIndex
removeByIndex
does the same thing as the remove
formula, except it does it by removing the element at a certain index in an array, rather than a value.
Example
Same example and return as the example for remove
, but with the index:
removeByKey
Given an array of objects, this formula will remove all the objects from the array where the given key is equal to a given value.
Example
Here's an array called users
with the following value:
json
[
{ "name": "Quentin", "role": "admin" },
{ "name": "Joyce", "role": "normal" },
{ "name": "Aurélie", "role": "admin" },
{ "name": "Kévin", "role": "normal" },
{ "name": "Raphael", "role": "superAdmin" }
]
If we were to remove all the admin users, we would do it like so:
reverse
Given an array, this formula will reverse its values order.
Example
Given back our countries
array:
json
[
"France",
"USA",
"Belgium",
"Croatia"
]
Reversing it will return this value:
rollup
Given an array of objects, this formula will return all the values for a given key. If the distinct
parameter is set to true
, it'll return unique values only (false
by default).
Example
Here's an array called users
which equals to:
json
[
{ "name": "Quentin", "role": "admin" },
{ "name": "Joyce", "role": "normal" },
{ "name": "Aurélie", "role": "admin" },
{ "name": "Kévin", "role": "normal" },
{ "name": "Raphael", "role": "superAdmin" }
]
If we were to get the possible roles, we would use the rollup
formula like this:
slice
This formula will return the values from an array from the startIndex
up to the endIndex
(endIndex
not included). It's the exact same function as the JavaScript's slice.
Example
Given a countries
array:
json
[
"France",
"USA",
"Belgium",
"Croatia"
]
Slicing it to get back only ["USA", "Belgium"]
would it be possible by using the slice
formula:
sort
Given an array, this formula will sort it in ascending ("asc"
) or descending ("desc"
) mode. It can be applied on a given key for arrays of objects.
Example
Taking back our array called users
which equals to:
json
[
{ "name": "Quentin", "role": "admin" },
{ "name": "Joyce", "role": "normal" },
{ "name": "Aurélie", "role": "admin" },
{ "name": "Kévin", "role": "normal" },
{ "name": "Raphael", "role": "superAdmin" }
]
To sort it by user's names in ascending order (alphabetically), we would use the sort
formula this way: