ホームページ >ウェブフロントエンド >jsチュートリアル >複数のプロパティによって配列内のオブジェクトを効率的にグループ化および集約するにはどうすればよいですか?

複数のプロパティによって配列内のオブジェクトを効率的にグループ化および集約するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-14 16:06:02584ブラウズ

How can I efficiently group and aggregate objects in an array by multiple properties?

複数のプロパティによる配列内のオブジェクトの効率的なグループ化と集約

この記事では、配列内のオブジェクトのグループ化という重要なタスクに取り組みます。

課題

複数の条件に基づいてオブジェクトを配列にグループ化することは、複雑な問題になる可能性があります。既存のソリューションでは、オブジェクトを複数のキーでグループ化できますが、効果的に結合して重複を除去できないことがよくあります。私たちの目標は、オブジェクトを形状と色でシームレスにグループ化し、それぞれの「使用済み」値と「インスタンス」値を合計し、重複を排除するソリューションを作成することです。

ソリューション

私たちのアプローチでは、array.reduce() メソッドをヘルパー オブジェクトと組み合わせて利用します。配列内のオブジェクトごとに、その形状と色を連結して一意のキーを構築します。次に、このキーがヘルパー オブジェクトに存在するかどうかを確認します。

  1. キーが存在する場合は、ヘルパー内の対応するオブジェクトの 'used' 値と 'instances' 値を単純にインクリメントします。
  2. キーが存在しない場合は、元のオブジェクトのコピーを使用して新しいオブジェクトを作成し、Object.assign() を使用してそれをヘルパー オブジェクトに追加します。また、このオブジェクトを結果配列にプッシュします。

ヘルパー オブジェクトを使用して形状と色の一意の組み合わせを追跡することで、重複を排除しながらオブジェクトを効果的にグループ化および集約します。

var arr = [{"shape":"square","color":"red","used":1,"instances":1},
{"shape":"square","color":"red","used":2,"instances":1},
{"shape":"circle","color":"blue","used":0,"instances":0},
{"shape":"square","color":"blue","used":4,"instances":4},
{"shape":"circle","color":"red","used":1,"instances":1},
{"shape":"circle","color":"red","used":1,"instances":0},
{"shape":"square","color":"blue","used":4,"instances":5},
{"shape":"square","color":"red","used":2,"instances":1}
];

var helper = {};
var result = arr.reduce(function(r, o) {
  var key = o.shape + '-' + o.color;

  if(!helper[key]) {
    helper[key] = Object.assign({}, o); // create a copy of o
    r.push(helper[key]);
  } else {
    helper[key].used += o.used;
    helper[key].instances += o.instances;
  }

  return r;
}, []);

console.log(result);

出力

このソリューションを実装すると、次のような望ましい結果が得られます。

[{"shape":"square","color":"red","used":5,"instances":3},
{"shape":"circle","color":"red","used":2,"instances":1},
{"shape":"square","color":"blue","used":11,"instances":9},
{"shape":"circle","color":"blue","used":0,"instances":0}]

これにより、オブジェクトを形状と色で効果的にグループ化し、それらを合計します。値を削除し、重複を削除します。

以上が複数のプロパティによって配列内のオブジェクトを効率的にグループ化および集約するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。