文章加密

;

2024年10月24日 星期四

reduce 做資料分組

 告訴我下面這段程式在做什麼? const list =txList.value.reduce((acc, item)=>{ if(!acc[item.txTerm])){ acc[item.txTerm] = [] } acc[item.txTerm].push(item) return acc },{}) ||[]; return list })

ChatGPT 說:
ChatGPT

這段程式碼的主要功能是將 txList.value 中的項目根據 txTerm 屬性進行分組。以下是程式碼的逐步解析:

  1. txList.value.reduce(...): 使用 reduce 方法來遍歷 txList.value 陣列,並將每個項目依據其 txTerm 屬性進行分組。

  2. (acc, item) => {...}: 這是一個回調函數,acc 是累積器,用來保存分組結果,item 是當前正在處理的項目。

  3. if(!acc[item.txTerm]): 檢查累積器 acc 中是否已經存在以 item.txTerm 為鍵的屬性。如果不存在,就創建一個空陣列。

  4. acc[item.txTerm].push(item): 將當前項目 item 添加到相應的 txTerm 鍵的陣列中。

  5. return acc: 返回累積器,繼續下一個項目的處理。

  6. {},: reduce 的初始值設為一個空物件 {}

  7. || []: 如果 reduce 的結果為假值(例如 undefined),則返回一個空陣列。

最後,這段程式碼的結果是將 txList.value 中的項目分組後返回的物件,其中每個 txTerm 對應一個項目陣列。

你說:
可以給個例子嗎
ChatGPT 說:
ChatGPT

當然可以!假設 txList.value 的內容如下:

javascript
const txList = { value: [ { id: 1, txTerm: 'A', amount: 100 }, { id: 2, txTerm: 'B', amount: 200 }, { id: 3, txTerm: 'A', amount: 150 }, { id: 4, txTerm: 'C', amount: 300 }, { id: 5, txTerm: 'B', amount: 250 }, ] };

運行你提供的程式碼後,list 的結果將會是:

javascript
{ A: [ { id: 1, txTerm: 'A', amount: 100 }, { id: 3, txTerm: 'A', amount: 150 } ], B: [ { id: 2, txTerm: 'B', amount: 200 }, { id: 5, txTerm: 'B', amount: 250 } ], C: [ { id: 4, txTerm: 'C', amount: 300 } ] }

在這個結果中,每個 txTerm(A、B、C)對應一個包含相關項目的陣列。這樣就成功地將項目按 txTerm 分組了!

沒有留言:

張貼留言