ホームページ > ウェブフロントエンド > jsチュートリアル > カスタム `groupBy` 関数を使用して JavaScript 配列内のオブジェクトを効率的にグループ化するにはどうすればよいですか?

カスタム `groupBy` 関数を使用して JavaScript 配列内のオブジェクトを効率的にグループ化するにはどうすればよいですか?

DDD
リリース: 2024-12-30 12:02:14
オリジナル
132 人が閲覧しました

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

配列内のオブジェクトを効果的にグループ化する

配列には複数のプロパティを持つ複雑なオブジェクトを含めることができるため、特定の基準に基づいてこれらのオブジェクトを効率的にグループ化する必要があります。 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート