How to Work with Arrays and Lists

Arrays Output

To iterate through and output each element of the array, you can use helper #each.
Imagine that you made a request to your customer accounting system, made a list of employees' names from it and wrote it to variable "names". We want to make it so that a client can choose one of the employees.
Inside variable "names", this list might look like this:
["Александрова Александра", "Иванов Иван", "Константинопольский Константин", "Ярослава Ярославна"]
Each element of the array inside #each is available as variable "this":
Пришлите мне имя сотрудника, к которому вы хотите записаться:

{{#each names}}
{{this}}
{{/each}}
The client will receive a message:
Пришлите мне имя сотрудника, к которому вы хотите записаться:

Александрова Александра
Иванов Иван
Константинопольский Константин
Ярослава Ярославна
Inside #each, special variable @index is also available. This is the ordinal number of the element. There is one feature - #each numbers arrays from zero:
Пришлите мне имя сотрудника, к которому вы хотите записаться:

{{#each names}}
{{@index}}. {{this}}
{{/each}}
You get:
Пришлите мне имя сотрудника, к которому вы хотите записаться:

0. Александрова Александра
1. Иванов Иван
2. Константинопольский Константин
3. Ярослава Ярославна
We can use any linear helpers inside body #each and easily correct the numbering by adding with one:
Пришлите мне имя сотрудника, к которому вы хотите записаться:

{{#each names}}
{{add @index 1}}. {{this}}
{{/each}}
Now you get the text the way you intended:
Пришлите мне имя сотрудника, к которому вы хотите записаться:

1. Александрова Александра
2. Иванов Иван
3. Константинопольский Константин
4. Ярослава Ярославна

Objects in Arrays and Lists

Arrays can contain not only simple data like strings as in the previous example. There may also be nested objects in it.
Let's say we asked your customer accounting system for a list of employees in the form of objects and wrote it to variable "staff". Our list in variables may look like this:
[
  {
    "id": 12345,
    "name": "Александрова Александра",
    "rating": 5
  },
  {
    "id": 12346,
    "name": "Иванов Иван",
    "rating": 5
  },
  {
    "id": 12347,
    "name": "Константинопольский Константин",
    "rating": 3
  },
  {
    "id": 12348,
    "name": "Ярослава Ярославна",
    "rating": 4
  }
]
We can work with such lists in the same way as with simple ones:
Пришлите мне имя сотрудника, к которому вы хотите записаться:

{{#each staff}}
{{!-- this теперь — это не строка с именем, а имя текущего объекта --}}
{{!-- мы можем обратиться к внутренней переменной `name` через this.name --}}
{{add @index 1}}. {{this.name}}
{{/each}}
As you can see, everything is as simple as with strings.
When we work with objects inside lists, we can omit "this" and write the name of the internal variable. Let's additionally send the rating to a client:
Пришлите мне имя сотрудника, к которому вы хотите записаться:

{{#each staff}}
{{!-- можно опустить this --}}
{{add @index 1}}. {{name}} — рейтинг: {{rating}}
{{/each}}
You will get this message:
Пришлите мне имя сотрудника, к которому вы хотите записаться:

1. Александрова Александра — рейтинг: 5
2. Иванов Иван — рейтинг: 5
3. Константинопольский Константин — рейтинг: 3
4. Ярослава Ярославна — рейтинг: 4
If we suddenly need to get something from a variable outside the array, inside #each we can go back up and read the desired variable using ../.
Imagine that we asked the client which employee rating he is most interested in, and we want to send all the names where the rating is the same or even better. Again, imagine that we write the rating that he sent to variable "min":
Пришлите мне имя сотрудника, к которому вы хотите записаться:

{{#each staff}}
{{!-- Комментарий: `../` — мы вышли из массива --}}
{{!-- Комментарий: `../min` — вышли из массива и получили `min` --}}
{{#gte rating ../min}}
{{!-- Комментарий: если `../min` равен или больше `rating` --}}
{{add @index 1}}. Вам может подойти {{name}}. Рейтинг: {{rating}}
{{else}}
{{!-- Комментарий: если `../min` меньше `rating` --}}
{{add @index 1}}. Кажется {{name}} вам не подходит. Рейтинг всего: {{rating}}
{{/gte}}
{{/each}}
If min = 4, you will get this message:
Пришлите мне имя сотрудника, к которому вы хотите записаться:

1. Вам может подойти Александрова Александра. Рейтинг: 5
2. Вам может подойти Иванов Иван. Рейтинг: 5
3. Кажется Константинопольский Константин вам не подходит. Рейтинг всего: 3
4. Вам может подойти Ярослава Ярославна. Рейтинг: 4