Все ноды/Logic & Flow/Iteration

Фильтр

Обходит JSON-массив с ED-порта «Input». Для каждого элемента запускает подграф; значение с порта end должно быть строго bool. При true исходный элемент попадает в выходной массив; при false — отбрасывается. Порядок сохранён. Результат ноды — отфильтрованный массив.

Фильтр
ArrayResult
ItemItem

Тип в графе: filter

ExecSubgraph

Можно включить ветку ошибки (expose_error_output) и обработать сбой отдельным путём.

Порты можно разделить на исполнение и данные (split ports).

Как попробовать

Отбор элементов по условию

Тело возвращает «да» или «нет» для элемента, нода оставляет в массиве только подошедшие.

Вход
Шаблон
Фильтр
Шаблон
Выход
  • Исполнение + данные
Нажмите «Скопировать ноды», откройте редактор и нажмите Ctrl+V на холсте.

Запускается сразу

Как применять

Берите эту ноду, когда из массива надо оставить часть элементов, ничего в них не меняя: отобрать заказы дороже порога, оставить только письма с вложением, отсеять строки, которые модель признала нерелевантными. Если элементы надо преобразовать — это map; если результат не нужен вовсе — for_each. Отбор по простому признаку, который считается прямо из данных, короче выразить фильтрами Jinja в template или одной нодой code_javascript; цикл нужен, когда решение принимает модель или внешний сервис.

Как это работает

На input (Array) приходит массив и команда запуска. Порт item (Start) начинает тело, end (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 (Done).
  • Ошибка одной итерации останавливает весь цикл — отфильтрованный массив не вернётся вовсе.

Входы

ПортПроводДанныеПримечания
ArrayinputИсполнение + данныеexecute_data

Run trigger and array payload (JSON array or string encoding an array).

ItemendИсполнение + данныеexecute_data

End of subgraph for one item; return value from inner graph.

Выходы

ПортПроводДанныеПримечания
ResultcompletedИсполнение + данныеexecute_data
ItemitemИсполнение + данныеexecute_data

Настройки

ПолеТипПо умолчаниюОписание
Включить индексinclude_indexbooleanfalse

Когда включено, каждая итерация передаёт словарь {item_key: element, index: n} на порт item. Когда выключено, порт item несёт само значение элемента массива (без обёртки-словаря).

Ключ элементаitem_variablestringitem

Ключ для текущего элемента в словаре payload (вместе с индексом) на порту item.

показывается при include_index = true

Макс. конкурентностьmax_concurrencyinteger10

Максимум параллельных запусков подграфа при включённом parallel_execution.

Параллельное выполнениеparallel_executionbooleanfalse

Планирует итерации подграфа параллельно; каждый запуск всё равно удерживает глобальную блокировку, поэтому внутренние ноды видят согласованный payload (только map/filter).

Общие поля

Эти три поля есть у каждой ноды: платформа добавляет их сама, а не автор ноды.

  • expose_error_output — Если включено, показывает выход выполнения для подключения нод, которые запускаются при сбое этого шага.
  • split_ports_in — Показывать отдельные порты входа для выполнения и данных вместо одного объединённого.
  • split_ports_out — Показывать отдельные порты выхода для выполнения и данных вместо одного объединённого.