有效地將數組中的對象分組
數組可以包含具有多個屬性的複雜對象,因此有必要根據特定條件對這些物件進行有效分組。 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中文網其他相關文章!