Construir un array anidado fusionado con un valor del array padre

Describe el problema/error/pregunta

Necesito fusionar un arreglo anidado basándome en los valores de una clave principal.

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

Por favor, comparte tu flujo de trabajo

Datos - recibe los datos en este formato, donde la ref se duplica en múltiples elementos, cada uno con un objeto anidado. Necesito una sola instancia:
[
  {
    "ref": "00075925",
    "Items": [
      {
        "ID": 1
      }
    ]
  },
  {
    "ref": "00075925",
    "Items": [
      {
        "ID": 2
      }
    ]
  },
  {
    "ref": "00075925",
    "Items": [
      {
        "ID": 3
      }
    ]
  },
  {
    "ref": "00075926",
    "Items": [
      {
        "ID": 1
      }
    ]
  },
  {
    "ref": "00075926",
    "Items": [
      {
        "ID": 2
      }
    ]
  },
  {
    "ref": "00075926",
    "Items": [
      {
        "ID": 3
      }
    ]
  }
]


La salida debe ser:
[
  {
    "ref": "00075925",
    "Items": [
      {
        "ID": 1
      },
      {
        "ID": 2
      },
      {
        "ID": 3
      }
    ]
  },
  {
    "ref": "00075926",
    "Items": [
      {
        "ID": 1
      },
      {
        "ID": 2
      },
      {
        "ID": 3
      }
    ]
  }
]

Comparte la salida devuelta por el último nodo

Necesito que la salida se vea como el ejemplo anterior, donde los elementos se fusionen en la ref, y el arreglo de objetos anidados se construya a partir de la entrada, pero por mucho que lo intento, no logro que el json sea correcto.

Información sobre tu configuración de n8n

  • Versión de n8n: En línea
  • Base de datos (predeterminada: SQLite):
  • Configuración EXECUTIONS_PROCESS de n8n (predeterminada: own, main):
  • n8n ejecutándose a través de n8n cloud
  • Sistema operativo:

Hola @Quiss, mientras esperas una respuesta, aquí hay algunas cosas que podrían ayudarte:

Recursos sugeridos

Coincidencia automática con tu pregunta.

Documentación:

Foro:

@Sven_Wesley, @DmitryMigunov, @Niffzy - ustedes han ayudado con problemas similares antes, ¿pueden echar un vistazo?

Sugerido automáticamente por el bot de la comunidad de n8n. Es un piloto - comparte tu opinión aquí.

¡Hola @Quiss! ¡Bienvenido!
Resume grupos en un campo de la forma en que lo hace una tabla dinámica, y su agregación Append recopila otro campo en cada grupo.

  1. Resumir: establece Campos para dividir por en ref, añade una agregación de Append en el campo Items, y establece Formato de salida en “Each Split in a Separate Item”.
  2. Editar campos: añade ref como String establecido en {{ $json.ref }}, e Items como Array establecido en {{ $json.appended_Items.reduce((all, one) => all.concat(one), []) }}.
    Append nombra su salida appended_Items y mantiene cada matriz de origen intacta, por lo que reduce las concatena en una única matriz Items.
    Summarize | Nodes | n8n Docs

Hola @Quiss

La forma más fácil de hacerlo en n8n es con un nodo de código. Como ref es el valor por el que deseas agrupar, puedes recorrer los elementos entrantes y recopilar todos los Items anidados bajo la misma ref. const grouped = {};

for (const item of $input.all()) {
const { ref, Items = } = item.json;

if (!grouped[ref]) {
grouped[ref] = {
ref,
Items:
};
}

grouped[ref].Items.push(…Items);
}

return Object.values(grouped).map(item => ({
json: item
}));

El código recorre cada elemento, verifica su valor ref y determina si ese ref ya ha sido agrupado.

Si no es así, crea un nuevo grupo. Si lo está, simplemente añade los nuevos Items al array existente.

Entonces todos los registros 00075925 se convierten en un objeto, y todos los registros 00075926 se convierten en otro.

Esto también funciona si tienes muchos más registros o si el número de Items cambia, así que no tienes que codificar los IDs ni el número de elementos.