Cómo deduplicar una lista de vacantes de una respuesta de API dentro del mismo payload

Describe el problema/error/pregunta

Cada vacante tiene un external_id único, pero algunos aparecen varias veces en la misma respuesta de API.

Mi objetivo:

Permitir exactamente un elemento de cada vacante
Filtrar duplicados dentro del mismo payload
Sin una verificación de Supabase, porque la base de datos aún está vacía

Estoy usando un nodo Code en modo “Run Once for All Items” para detectar duplicados.

¿Cuál es el mensaje de error (si hay alguno)?

Por favor comparte tu workflow

(Selecciona los nodos en tu lienzo y usa los atajos de teclado CMD+C/CTRL+C y CMD+V/CTRL+V para copiar y pegar el workflow.)

Comparte el resultado devuelto por el último nodo

Información de tu configuración de n8n

  • Versión de n8n:
  • Base de datos (por defecto: SQLite):
  • Configuración EXECUTIONS_PROCESS de n8n (por defecto: own, main):
  • Ejecutando n8n a través de (Docker, npm, n8n cloud, aplicación de escritorio):
  • Sistema operativo:

@haajj3012 Nodo de código en modo “Run Once for All Items”:

const seen = new Set();
return $input.all().filter(item => {
  const id = item.json.external_id;
  if (seen.has(id)) return false;
  seen.add(id);
  return true;
});

emite un elemento por cada external_id único, descarta el resto. Si quieres mantener uno ESPECÍFICO (el más reciente por fecha, la versión más alta, etc) en lugar de “el primero visto” avísame.

Hola @haajj3012,
el código de @achamm funciona perfectamente. solo añado una
opción sin código por si prefieres mantener todo visual en
el flujo de trabajo:

n8n tiene un nodo Remove Duplicates integrado que hace exactamente
esto sin escribir javascript. configuración:

  1. coloca un nodo Remove Duplicates después de tu llamada a la api
  2. operación: “Remove Items With Same Field Value”
  3. campo de comparación: external_id

filtrará el array dejando solo los elementos únicos en un nodo, más fácil
de ver en el lienzo después cuando estés depurando.

algunos casos límite pequeños que vale la pena manejar con cualquier
enfoque que uses:

  • si external_id alguna vez falta o es null en algunos elementos, tanto
    el código como el nodo tratarán todos los nulls como duplicados
    entre sí. normalmente está bien, pero si quieres mantener los nulls,
    añade un filtro antes del paso de deduplicación para separarlos.
  • si la api alguna vez devuelve el id como número en algunos elementos
    y como string en otros, ambos enfoques tratarán "123"
    y 123 como diferentes. un simple String(item.json.external_id)
    en el código (o un nodo Set para normalizar el tipo) lo soluciona.

ya que mencionaste que supabase viene después — cuando lo añadas,
el patrón más limpio es deduplicar dentro del payload primero
(lo que estás haciendo ahora), luego deduplicar contra supabase como
segundo paso. mantiene la lógica limpia y fácil de probar cada capa
de manera independiente.

Excelentes respuestas de @achamm y @Dharmendra_Kumar – el patrón Set + filter en el nodo Code es sólido, y la opción visual con Remove Duplicates es exactamente lo indicado para este caso de uso.

Como n8n ya soporta este escenario muy bien de forma nativa, personalmente evitaría un nodo Code aquí y me inclinaría completamente por el nodo integrado. Mantiene el flujo de trabajo más fácil de leer y generalmente más estable a largo plazo.

Para tu objetivo específico ("exactamente un elemento por external_id dentro del mismo payload, BD aún vacía"), puedes configurar Remove Duplicates así:

  • Agrega un nodo Remove Duplicates justo después de tu nodo API.
  • Establece Operation en Remove Items Repeated Within Current Input.
  • Establece CompareSelected Fields y elige external_id como el campo.

Esto mantendrá solo el primer elemento para cada external_id en la ejecución actual y descartará todos los duplicados posteriores -- exactamente lo que describiste, sin código adicional ni verificaciones de base de datos.

Más adelante, cuando comiences a usar Supabase y también quieras omitir vacantes que ya has procesado en ejecuciones anteriores, puedes encadenar un segundo nodo Remove Duplicates en modo Remove Items Processed in Previous Executions. De esa forma obtienes un patrón limpio "dedupe dentro del payload → dedupe contra historial", todo con nodos nativos.