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

バニラのアプローチを使用して JavaScript でオブジェクトの配列を効率的にグループ化するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-30 12:31:13
オリジナル
279 人が閲覧しました

How Can I Efficiently Group an Array of Objects in JavaScript Using a Vanilla Approach?

オブジェクトの配列に対する効率的な GroupBy メソッド

共通のプロパティに基づいてオブジェクトをグループ化することは、データ処理における一般的なタスクです。このスニペットは、標準的な JavaScript アプローチを使用して、配列内のオブジェクトをグループ化するための効率的なソリューションを提供します。

Underscore.js を避ける理由

Underscore.js は groupBy 関数を提供しますが、その実装はサポートされていない可能性があります。個別のグループではなく「マージされた」結果が必要な場合に適しています。

カスタム Vanilla JS GroupBy

次のスクリプトは、オブジェクトの配列を操作する groupBy 関数を定義します:

var groupBy = function(xs, key) {
  return xs.reduce(function(rv, x) {
    (rv[x[key]] = rv[x[key]] || []).push(x);
    return rv;
  }, {});
};
ログイン後にコピー

使用例

オブジェクトを「フェーズ」でグループ化するには:

const data = [
  { Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" },
  ...
];
const groupedByPhase = groupBy(data, 'Phase');
ログイン後にコピー

groupedByPhase は含まれる:

{
  "Phase 1": [
    { Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" },
    ...
  ],
  "Phase 2": [
    { Phase: "Phase 2", Step: "Step 1", Task: "Task 1", Value: "25" },
    ...
  ]
}
ログイン後にコピー

「ステップ」でさらにグループ化するには:

const groupedByPhaseStep = _(groupedByPhase).values().map(phase => {
  return groupBy(phase, 'Step');
}).value();
ログイン後にコピー

groupedByPhaseStep には次のものが含まれます:

[
  {
    "Phase": "Phase 1",
    "Step": "Step 1",
    "Value": 15
  },
  ...
]
ログイン後にコピー

以上がバニラのアプローチを使用して JavaScript でオブジェクトの配列を効率的にグループ化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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