Как работать с массивами и списками
Объекты в массивах и списках →
Вывод массивов
Чтобы перебрать и вывести каждый элемент массива, можно использовать хелпер #each.
Представьте, что вы сделали запрос в свою систему учета клиентов, получили из нее список имен сотрудников и записали его в переменную names. Мы хотим сделать так, чтобы одного из сотрудников клиент мог выбрать.
Внутри переменной names этот список может выглядеть как-то так:
["Александрова Александра", "Иванов Иван", "Константинопольский Константин", "Ярослава Ярославна"]
Каждый элемент массива внутри #each доступен как переменная this:
Пришлите мне имя сотрудника, к которому вы хотите записаться:
{{#each names}}
{{this}}
{{/each}}
Клиенту придет сообщение:
Пришлите мне имя сотрудника, к которому вы хотите записаться: Александрова Александра Иванов Иван Константинопольский Константин Ярослава Ярославна
Внутри #each также доступна специальная переменная @index — это порядковый номер элемента. Есть одна особенность — #each нумерует массивы от нуля:
Пришлите мне имя сотрудника, к которому вы хотите записаться:
{{#each names}}
{{@index}}. {{this}}
{{/each}}
Получится:
Пришлите мне имя сотрудника, к которому вы хотите записаться: 0. Александрова Александра 1. Иванов Иван 2. Константинопольский Константин 3. Ярослава Ярославна
Мы можем использовать внутри тела #each любые линейные хелперы и легко исправить нумерацию при помощи сложения с единицей:
Пришлите мне имя сотрудника, к которому вы хотите записаться:
{{#each names}}
{{add @index 1}}. {{this}}
{{/each}}
Теперь получится текст таким, каким мы его и задумывали:
Пришлите мне имя сотрудника, к которому вы хотите записаться: 1. Александрова Александра 2. Иванов Иван 3. Константинопольский Константин 4. Ярослава Ярославна
Объекты в массивах и списках
Внутри массивов могут быть не только простые данные вроде строк, как в прошлом примере. Там могут быть и вложенные объекты.
Допустим, мы попросили у вашей системы учета клиентов список сотрудников в виде объектов и записали его в переменную staff. Наш список в переменных может выглядеть как-то так:
[
{
"id": 12345,
"name": "Александрова Александра",
"rating": 5
},
{
"id": 12346,
"name": "Иванов Иван",
"rating": 5
},
{
"id": 12347,
"name": "Константинопольский Константин",
"rating": 3
},
{
"id": 12348,
"name": "Ярослава Ярославна",
"rating": 4
}
]
С такими списками мы можем работать точно также, как с простыми:
Пришлите мне имя сотрудника, к которому вы хотите записаться:
{{#each staff}}
{{!-- this теперь — это не строка с именем, а имя текущего объекта --}}
{{!-- мы можем обратиться к внутренней переменной `name` через this.name --}}
{{add @index 1}}. {{this.name}}
{{/each}}
Как видите, все также просто, как и со строками.
Когда мы работаем с объектами внутри списков, мы можем опустить this и писать сразу имя внутренней переменной. Давайте дополнительно отправим клиенту рейтинг:
Пришлите мне имя сотрудника, к которому вы хотите записаться:
{{#each staff}}
{{!-- можно опустить this --}}
{{add @index 1}}. {{name}} — рейтинг: {{rating}}
{{/each}}
Получится такое сообщение:
Пришлите мне имя сотрудника, к которому вы хотите записаться: 1. Александрова Александра — рейтинг: 5 2. Иванов Иван — рейтинг: 5 3. Константинопольский Константин — рейтинг: 3 4. Ярослава Ярославна — рейтинг: 4
Если вдруг потребуется получить что-то из переменной вне массива, внутри #each мы можем вернуться наверх и прочитать нужную переменную с помощью ../.
Представьте, что мы спросили у клиента, какой рейтинг сотрудника его больше всего интересует, и хотим отправить все имена, где рейтинг совпадает или даже лучше. Снова представьте, что рейтинг который он прислал мы записали в переменную 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}}
Если min = 4, то получится такое сообщение:
Пришлите мне имя сотрудника, к которому вы хотите записаться: 1. Вам может подойти Александрова Александра. Рейтинг: 5 2. Вам может подойти Иванов Иван. Рейтинг: 5 3. Кажется Константинопольский Константин вам не подходит. Рейтинг всего: 3 4. Вам может подойти Ярослава Ярославна. Рейтинг: 4
Если потребуется отправить список по частям, рекомендуем использовать данную инструкцию →
Массив можно очистить с помощью компонента Запись переменной с типом данных Пустой список. В имени переменной должно быть название списка, который нужно очистить.