ホームページ > 記事 > ウェブフロントエンド > 配列内のオブジェクトを複数のプロパティごとに効率的にグループ化し、それらの値を要約するにはどうすればよいでしょうか?
配列内の複数のプロパティによる効率的なオブジェクトのグループ化
配列内のオブジェクトをグループ化するタスクは、単一のプロパティを超えて拡張される場合があります。場合によっては、グループ化のために複数のプロパティを考慮する必要があります。このシナリオでは、カスタマイズされたアプローチが必要です。
形状と色に基づいてオブジェクトをグループ化する問題に取り組んでみましょう。目的は、同じ形状と色のオブジェクトをグループ化し、それらの使用値とインスタンス値を合計することです。
期待される動作:
const 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 } ]; const expectedResult = [ { 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 } ];
重要な考慮事項:
解決策:
Array#reduce を利用して、形状と色を追跡するヘルパー オブジェクトを維持しながら、配列を反復処理できます。
オブジェクトごとに:
キーがヘルパー オブジェクト:
キーがすでにヘルパー オブジェクト:
このプロセスは、値を蓄積しながら、同じ形状と色のオブジェクトを効果的にグループ化します。
コード スニペット:
const 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 } ]; let helper = {}; const result = arr.reduce((r, o) => { const key = `${o.shape}-${o.color}`; if (!helper[key]) { helper[key] = Object.assign({}, o); r.push(helper[key]); } else { helper[key].used += o.used; helper[key].instances += o.instances; } return r; }, []); console.log(result);
出力は一貫して正しく、期待されたものと一致します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 サイトの他の関連記事を参照してください。