首頁 >web前端 >js教程 >如何使用自訂「groupBy」函數有效地將 JavaScript 陣列中的物件分組?

如何使用自訂「groupBy」函數有效地將 JavaScript 陣列中的物件分組?

DDD
DDD原創
2024-12-30 12:02:14147瀏覽

How Can I Efficiently Group Objects in JavaScript Arrays Using a Custom `groupBy` Function?

有效地將數組中的對象分組

數組可以包含具有多個屬性的複雜對象,因此有必要根據特定條件對這些物件進行有效分組。 Underscore.js 提供了一個方便的 groupby 函數,但它可能無法滿足特定要求。

為了實現類似 SQL 的分組(合併而不是拆分值),通常首選自訂方法。下面介紹了一個這樣的實作:

var groupBy = function(xs, key) {
  return xs.reduce(function(rv, x) {
    (rv[x[key]] = rv[x[key]] || []).push(x);
    return rv;
  }, {});
};

此函數接受陣列 xs 和分組鍵 key。它迭代數組元素,將它們累積到結果物件 rv 中。每個組由鍵屬性的值標識。

為了進行演示,請考慮以下物件數組:

[ 
    { Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" },
    { Phase: "Phase 1", Step: "Step 1", Task: "Task 2", Value: "10" },
    { Phase: "Phase 1", Step: "Step 2", Task: "Task 1", Value: "15" },
    { Phase: "Phase 1", Step: "Step 2", Task: "Task 2", Value: "20" },
    // ... (more objects)
]

按階段分組產生:

console.log(groupBy(array, "Phase"));
// => {
//   "Phase 1": [
//     // Objects in Phase 1
//   ],
//   "Phase 2": [
//     // Objects in Phase 2
//   ]
// }

按階段和步驟分組組合值:

console.log(groupBy(array, "Phase", "Step"));
// => {
//   "Phase 1": {
//     "Step 1": [
//       // Objects in Phase 1, Step 1
//     ],
//     "Step 2": [
//       // Objects in Phase 1, Step 2
//     ]
//   },
//   "Phase 2": {
//     // Similar object structure for Phase 2
//   }
// }

此方法提供了一種靈活有效的方法來對物件進行分組數組。透過實作自訂 groupBy 函數,您可以控制分組邏輯,並可以輕鬆擴展它以處理更複雜的場景。

以上是如何使用自訂「groupBy」函數有效地將 JavaScript 陣列中的物件分組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn