Как работать с массивами и списками
Объекты в массивах и списках →
Вывод массивов
Чтобы перебрать и вывести каждый элемент массива, можно использовать хелпер #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
Если потребуется отправить список по частям, рекомендуем использовать данную инструкцию →
Массив можно очистить с помощью компонента Запись переменной с типом данных Пустой список. В имени переменной должно быть название списка, который нужно очистить.