ホームページ >ウェブフロントエンド >jsチュートリアル >複数のプロパティによって配列内のオブジェクトを効率的にグループ化および集約するにはどうすればよいですか?
複数のプロパティによる配列内のオブジェクトの効率的なグループ化と集約
この記事では、配列内のオブジェクトのグループ化という重要なタスクに取り組みます。
課題
複数の条件に基づいてオブジェクトを配列にグループ化することは、複雑な問題になる可能性があります。既存のソリューションでは、オブジェクトを複数のキーでグループ化できますが、効果的に結合して重複を除去できないことがよくあります。私たちの目標は、オブジェクトを形状と色でシームレスにグループ化し、それぞれの「使用済み」値と「インスタンス」値を合計し、重複を排除するソリューションを作成することです。
ソリューション
私たちのアプローチでは、array.reduce() メソッドをヘルパー オブジェクトと組み合わせて利用します。配列内のオブジェクトごとに、その形状と色を連結して一意のキーを構築します。次に、このキーがヘルパー オブジェクトに存在するかどうかを確認します。
ヘルパー オブジェクトを使用して形状と色の一意の組み合わせを追跡することで、重複を排除しながらオブジェクトを効果的にグループ化および集約します。
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 サイトの他の関連記事を参照してください。