Ir al contenido

Array Filter

El nodo Array Filter filtra un array de objetos mediante una expresión JavaScript. Cada elemento del array se evalúa individualmente: si la condición es true, el elemento se incluye en el resultado; de lo contrario, se descarta.

A diferencia de Key Filter (que solo compara contra una lista fija de valores), Array Filter soporta cualquier expresión JavaScript: rangos, condiciones múltiples, métodos de string, comparaciones contra datos de otros nodos, etc.

La variable item representa el elemento actual que se está evaluando. La variable data da acceso al payload completo del nodo actual, útil para comparar contra valores de nodos anteriores.

ParámetroTipoRequeridoDescripción
sourcetextNoRuta dot-notation al array dentro del data. Si se deja vacío, usa data directamente. Ejemplo: items, result.rows
conditiontextareaSíExpresión JavaScript. Usa item para el elemento actual y data para el payload completo
includeNonMatchingselectNofalse (por defecto): devuelve solo el array de coincidencias. true: devuelve { matching, nonMatching, _matched, _removed, _total }

Devuelve los elementos que cumplen la condición como array directo (compatible con otros nodos que esperan un array):

[
{ "name": "Luis", "country": "ES", "price": 120 },
{ "name": "Marie", "country": "FR", "price": 200 },
{ "name": "Marc", "country": "FR", "price": 150 },
{ "name": "Rosa", "country": "ITA", "price": 180 }
]
{
"matching": [
{ "name": "Luis", "price": 120 },
{ "name": "Marie", "price": 200 }
],
"nonMatching": [
{ "name": "Ana", "price": 50 },
{ "name": "Jean", "price": 30 }
],
"_matched": 2,
"_removed": 2,
"_total": 4
}
{
"label": "Solo España",
"condition": "item.country === 'ES'"
}
{
"label": "Precio entre 50 y 200",
"condition": "item.price >= 50 && item.price <= 200"
}
{
"label": "Adultos activos",
"condition": "item.status === 'active' && item.age >= 18"
}

Filtrar por etiqueta (array dentro del objeto)

Sección titulada «Filtrar por etiqueta (array dentro del objeto)»
{
"label": "Clientes VIP",
"condition": "item.tags && item.tags.includes('vip')"
}
{
"label": "No cancelados",
"condition": "item.status !== 'cancelled'"
}
{
"label": "Sobre precio mínimo",
"condition": "item.price > {{min_price}}"
}

El valor {{min_price}} se resuelve desde el data del nodo actual antes de evaluar la condición.

Array desde otro nodo + incluir no coincidentes

Sección titulada «Array desde otro nodo + incluir no coincidentes»
{
"label": "Filtrar Premium",
"source": "customers",
"condition": "item.plan === 'premium'",
"includeNonMatching": "true"
}

data.matching → clientes premium
data.nonMatching → el resto

CampoDescripción
(array)Con includeNonMatching: false — array directo de elementos que cumplen la condición
matchingCon includeNonMatching: true — elementos que pasaron el filtro
nonMatchingCon includeNonMatching: true — elementos que no pasaron
_matchedCantidad de coincidencias
_removedCantidad de elementos descartados
_totalTotal de elementos evaluados

La condición es una expresión JavaScript evaluada con "use strict". Variables disponibles:

VariableDescripción
itemElemento actual del array que se está evaluando
dataPayload completo del nodo actual

Operadores soportados: ===, !==, >, <, >=, <=, &&, \|\|, !

Métodos soportados: item.campo.includes(), item.campo.startsWith(), item.campo.endsWith(), Array.isArray(item.campo), etc.

  • Si item no tiene el campo referenciado en la condición, la expresión devuelve false (sin error); el elemento va a nonMatching
  • Las variables dinámicas ({{campo}}) en la condición se resuelven antes de la evaluación
  • El campo source soporta variables cross-node: {{@NombreNodo.campo}}, {{#N.campo}}
  • Si la condición compilada lanza error para un elemento específico, ese elemento se trata como no coincidente (el flujo global no se interrumpe)
  • No requiere credenciales
  • Array Group By — agrupar array por valor de campo
  • Key Filter — filtrar por lista estática de valores exactos
  • Decision — bifurcación condicional basada en expresión
  • Iterator — iterar sobre el array filtrado