Все ноды/Logic & Flow/Iteration
Фильтр
Обходит массив со входа «Массив». Для каждого элемента запускает тело; значение, пришедшее на вход «Оставить элемент?», должно быть строго да/нет. Да — элемент попадает в результат, нет — отбрасывается. Порядок сохраняется.
Тип в графе: filter
ExecSubgraph
Можно включить выход ошибки и обработать сбой отдельным путём.
Порты можно разделить на исполнение и данные (split ports).
Как попробовать
Отбор элементов по условию
Тело возвращает «да» или «нет» для элемента, нода оставляет в массиве только подошедшие.
- Исполнение + данные
Запускается сразу
Как применять
Берите эту ноду, когда из массива надо оставить часть элементов, ничего в них не меняя: отобрать заказы дороже порога, оставить только письма с вложением, отсеять строки, которые модель признала нерелевантными. Если элементы надо преобразовать — это map; если результат не нужен вовсе — for_each. Отбор по простому признаку, который считается прямо из данных, короче выразить фильтрами шаблоном template или одной нодой code_javascript; цикл нужен, когда решение принимает модель или внешний сервис.
Как это работает
На input («Массив») приходит массив и команда запуска. Порт item («Элемент») начинает тело,
end («Оставить элемент?») его замыкает. Для каждого элемента выполняется тело, и значение на end
трактуется как ответ «оставить или нет». В выходной массив попадает исходный элемент, а
не то, что вернуло тело; порядок сохраняется. Результат ноды — отфильтрованный массив:
{{ nodes.<id>.output }}.
Значение на end должно быть настоящим логическим. Шаблон вида {{ inputs.input.score > 5 }}
подходит: он отдаёт True или False, и нода их понимает. Строки "true", "да", 1 и
пустая строка не подходят — итерация упадёт с сообщением, в котором указан номер элемента и
что именно пришло.
Флаги «Включить индекс» и «Параллельное выполнение» работают так же, как у map: с индексом
на item уходит объект {<ключ элемента>: значение, index: N}, а параллельный режим
планирует итерации одновременно, но тела выполняются под общей блокировкой.
Частые ошибки
- Тело возвращает не логическое значение. Самый частый случай — шаблон, который отдаёт
текст или
"true"строкой. Пишите сравнение целиком внутри{{ }}. - Попытка изменить элемент. Значение с
endиспользуется только как признак; чтобы получить преобразованные элементы, нуженmap(можно сначала отфильтровать, потом преобразовать). - На вход подан объект, а не массив. Поставьте перед циклом
templateс{{ inputs.input.items | tojson }}; валидатор предупреждает об этой связи заранее. - Тело не замкнуто. Ребро из
itemи ребро вendобязательны, иначе сценарий не задеплоится. - Цикл внутри цикла. Вложенные циклы отвергаются валидатором: ставьте их
последовательно или переносите внутренний обход в
code_javascript. - Ребро из тела «наружу». Продолжение от нод тела выполняется на каждой итерации;
дальнейший граф стройте от порта
completed(«Готово»). - Ошибка одной итерации останавливает весь цикл — отфильтрованный массив не вернётся вовсе.
Входы
| Порт | Провод | Данные | Примечания |
|---|---|---|---|
Массивinput | Исполнение + данныеexecute_data | — | Запускает шаг и приносит список: массив JSON или строку с массивом. |
Оставить элемент?end | Исполнение + данныеexecute_data | — | true — элемент останется в результате, false — будет отброшен. |
Выходы
| Порт | Провод | Данные | Примечания |
|---|---|---|---|
Готово · что прошло фильтрcompleted | Исполнение + данныеexecute_data | — | |
Элементitem | Исполнение + данныеexecute_data | — |
Настройки
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
Включить индексinclude_index | boolean | false | Когда включено, каждая итерация передаёт словарь {item_key: element, index: n} на порт item. Когда выключено, порт item несёт само значение элемента массива (без обёртки-словаря). |
Ключ элементаitem_variable | string | item | Ключ для текущего элемента в словаре payload (вместе с индексом) на порту item. показывается при «Включить индекс» = да |
Макс. одновременных запусковmax_concurrency | integer | 10 | Максимум параллельных запусков подграфа при включённом parallel_execution. |
Параллельное выполнениеparallel_execution | boolean | false | Планирует итерации подграфа параллельно; каждый запуск всё равно удерживает глобальную блокировку, поэтому внутренние ноды видят согласованный payload (только map/filter). |
Общие поля
Эти три поля есть у каждой ноды: платформа добавляет их сама, а не автор ноды.
expose_error_output— Если включено, показывает выход выполнения для подключения нод, которые запускаются при сбое этой ноды.split_ports_in— Показывать отдельные порты входа для выполнения и данных вместо одного объединённого.split_ports_out— Показывать отдельные порты выхода для выполнения и данных вместо одного объединённого.