Mengumpulkan Objek mengikut Pelbagai Sifat dan Nilai Mengagregatkan
Dalam tugas mengumpulkan objek dalam tatasusunan dengan berbilang sifat, keperluan biasa adalah untuk bukan sahaja kumpulan mengikut sifat ini tetapi juga merumuskan nilai sifat objek tertentu. Walau bagaimanapun, penyelesaian yang hanya menyarangkan semua pendua dalam tatasusunan dua dimensi adalah tidak mencukupi.
Pernyataan Masalah
Pertimbangkan tatasusunan objek yang mesti dikumpulkan mengikut bentuk dan warna. Objek dalam tatasusunan ini dianggap pendua hanya jika kedua-dua bentuk dan warnanya adalah sama. Untuk objek pendua, kita perlu merumuskan nilai terpakai dan instancenya dan mengalih keluar pendua, menghasilkan senarai objek yang ringkas dengan bentuk dan warna yang unik.
Penyelesaian
Untuk menyelesaikan masalah ini dengan berkesan, kami boleh memanfaatkan kaedah Array#reduce bersama-sama dengan objek pembantu yang menjejaki gabungan bentuk dan warna yang ditemui:
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 helper = {}; const result = arr.reduce((r, o) => { const key = `${o.shape}-${o.color}`; if (!helper[key]) { // If it's a unique combination, add to the helper and result array helper[key] = Object.assign({}, o); r.push(helper[key]); } else { // If it's a duplicate, update the values in the helper helper[key].used += o.used; helper[key].instances += o.instances; } return r; }, []); console.log(result);
Output:
[ { 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 } ]
Penyelesaian ini mengelompokkan objek mengikut bentuk dan warna dengan cekap, mengagregatkan nilai terpakai dan contoh untuk objek pendua dan mengalih keluar sebarang pendua yang tinggal, menghasilkan output yang diingini.
Atas ialah kandungan terperinci Bagaimana untuk Menghimpunkan Objek mengikut Pelbagai Sifat dan Nilai Agregat dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!