ホームページ  >  に質問  >  本文

オブジェクト配列をグループ化する最も効率的な方法

<p>配列内のオブジェクトをグループ化する最も効率的な方法は何ですか? </p> <p>たとえば、次のようなオブジェクトの配列があるとします。</p> <pre class="brush:php;toolbar:false;">[ { フェーズ: "フェーズ 1"、ステップ: "ステップ 1"、タスク: "タスク 1"、値: "5" }, { フェーズ: "フェーズ 1"、ステップ: "ステップ 1"、タスク: "タスク 2"、値: "10" }, { フェーズ: "フェーズ 1"、ステップ: "ステップ 2"、タスク: "タスク 1"、値: "15" }, { フェーズ: "フェーズ 1"、ステップ: "ステップ 2"、タスク: "タスク 2"、値: "20" }, { フェーズ: "フェーズ 2"、ステップ: "ステップ 1"、タスク: "タスク 1"、値: "25" }, { フェーズ: "フェーズ 2"、ステップ: "ステップ 1"、タスク: "タスク 2"、値: "30" }, { フェーズ: "フェーズ 2"、ステップ: "ステップ 2"、タスク: "タスク 1"、値: "35" }, { フェーズ: "フェーズ 2"、ステップ: "ステップ 2"、タスク: "タスク 2"、値: "40" } ]</pre> <p>この情報を表に表示しています。さまざまな方法でグループ化したいのですが、値を合計したいのです。 </p> <p>Underscore.js の groupby 関数を使用しています。これは便利ですが、SQL の group by のように、それらを「分離」するのではなく「マージ」したいので、ニーズを完全には満たしません。方法。 </p> <p>私が望んでいるのは、必要に応じて特定の値を合計できることです。 </p> <p>したがって、<code>Phase</code> でグループ化すると、次のようになります: </p> <pre class="brush:php;toolbar:false;">[ { フェーズ: "フェーズ 1"、値: 50 }、 { フェーズ: "フェーズ 2"、値: 130 } ]</pre> <p><code>Phase</code> / <code>Step</code> でグループ化すると、次のようになります: </p> <pre class="brush:php;toolbar:false;">[ { フェーズ: "フェーズ 1"、ステップ: "ステップ 1"、値: 15 }, { フェーズ: "フェーズ 1"、ステップ: "ステップ 2"、値: 35 }、 { フェーズ: "フェーズ 2"、ステップ: "ステップ 1"、値: 55 }、 { フェーズ: "フェーズ 2"、ステップ: "ステップ 2"、値: 75 } ]</pre> <p>これを実行できる便利なスクリプトはありますか、それとも Underscore.js を使い続けて、結果オブジェクトをループして合計を実行する必要がありますか? </p>
P粉310754094P粉310754094426日前561

全員に返信(2)返信します

  • P粉029327711

    P粉0293277112023-08-22 12:54:13

    ES6 マップ オブジェクトを使用:

  • P粉590428357

    P粉5904283572023-08-22 11:08:27

    外部ライブラリの使用を避けたい場合は、次のように groupBy() のネイティブ バージョンを実装するだけです:

    リーリー

    返事
    0
  • キャンセル返事