配列内のオブジェクトを効果的にグループ化する
配列には複数のプロパティを持つ複雑なオブジェクトを含めることができるため、特定の基準に基づいてこれらのオブジェクトを効率的にグループ化する必要があります。 Underscore.js は便利な groupby 関数を提供しますが、特定の要件を満たしていない可能性があります。
値を分割するのではなくマージする SQL のようなグループ化を実現するには、多くの場合、カスタム アプローチが推奨されます。そのような実装の 1 つを以下に示します。
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 中国語 Web サイトの他の関連記事を参照してください。