根據父陣列的值建立合併的巢狀陣列

描述問題/錯誤/提問

我需要根據父鍵的值來合併嵌套陣列。

錯誤訊息是什麼(如果有的話)?

請分享你的工作流

資料 - 以此格式接收資料,其中 ref 在多個項目中重複,每個項目都有一個嵌套物件。我需要單一實例:
[
  {
    "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
      }
    ]
  }
]


輸出應該是:
[
  {
    "ref": "00075925",
    "Items": [
      {
        "ID": 1
      },
      {
        "ID": 2
      },
      {
        "ID": 3
      }
    ]
  },
  {
    "ref": "00075926",
    "Items": [
      {
        "ID": 1
      },
      {
        "ID": 2
      },
      {
        "ID": 3
      }
    ]
  }
]

分享最後一個節點返回的輸出

我需要輸出看起來像上面的例子,其中項目根據 ref 合併,嵌套物件陣列是從輸入構建的,但無論如何我都無法正確編寫 json。

關於你的 n8n 設置的資訊

  • n8n 版本:線上
  • 資料庫(預設:SQLite):
  • n8n EXECUTIONS_PROCESS 設置(預設:own、main):
  • 透過 n8n 雲端執行 n8n
  • 作業系統:

嘿 @Quiss,在等待回應的同時,以下是一些可能對你有幫助的資源:

建議的資源

自動符合你的問題。

文件:

論壇:

@Sven_Wesley、@DmitryMigunov、@Niffzy - 你們之前都幫助過類似的問題,能幫我看一下嗎?

由 n8n 社群機器人自動建議。這是試點計畫 - 請在此分享意見。

嗨 @Quiss 歡迎!
以樞紐分析表的方式在欄位上彙總群組,其 Append 聚合會收集每個群組中的另一個欄位。

  1. 彙總:將「分割欄位」設定為 ref,在 Items 欄位上新增一個 Append 聚合,並將輸出格式設定為「每個分割在單獨項目中」。
  2. 編輯欄位:新增 ref 作為字串設定為 {{ $json.ref }},以及 Items 作為陣列設定為 {{ $json.appended_Items.reduce((all, one) => all.concat(one), []) }}。
    Append 將其輸出命名為 appended_Items 並保持每個來源陣列完整,所以 reduce 會將它們連接回一個 Items 陣列。
    Summarize | Nodes | n8n Docs

嗨 @Quiss

我在 n8n 中處理這個問題最簡單的方法是使用「程式碼」節點。由於 ref 是你想要分組的值,你可以遍歷傳入的項目,並收集相同 ref 下的所有嵌套 Items。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
}));

程式碼會逐項檢查,查看其 ref 值,並判斷該 ref 是否已經被分組。

如果還沒有,它會建立新的分組。如果已經有,它就會將新的 Items 加入現有的陣列中。

所以所有 00075925 記錄會變成一個物件,所有 00075926 記錄則變成另一個物件。

這個方法也適用於你有更多記錄的情況,或 Items 數量發生變化時,所以你不必硬編碼 ID 或項目數量。