Pengumpulan Objek Cekap dengan Pelbagai Sifat dalam Tatasusunan
Tugas mengumpulkan objek dalam tatasusunan boleh melangkaui satu sifat; dalam keadaan tertentu, berbilang sifat perlu dipertimbangkan untuk pengelompokan. Dalam senario ini, pendekatan tersuai diperlukan.
Mari kita tangani masalah mengumpulkan objek berdasarkan bentuk dan warna. Objektifnya adalah untuk mengumpulkan objek dengan bentuk dan warna yang sama, sambil merumuskan nilai terpakai dan kejadiannya.
Gelagat Yang Dijangka:
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 } ];
Pertimbangan Utama :
Penyelesaian:
Memanfaatkan Array#reduce, kita boleh lelaran melalui tatasusunan sambil mengekalkan objek pembantu untuk menjejak kombinasi bentuk-warna.
Untuk setiap objek:
Jika kunci tidak ditemui dalam objek pembantu:
Jika kunci sudah ada dalam objek pembantu:
Proses ini dengan berkesan mengumpulkan objek dengan bentuk dan warna yang sama sambil mengumpul nilainya.
Coretan Kod:
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);
Output adalah betul secara konsisten, sepadan dengan hasil yang dijangkakan:
[ { 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 } ]
Dengan menggunakan teknik ini, anda boleh mengumpulkan dan meringkaskan nilai dengan cekap berdasarkan berbilang sifat, memperkasakan anda untuk mengendalikan tugas manipulasi data yang kompleks dalam tatasusunan.
Atas ialah kandungan terperinci Bagaimana untuk mengelompokkan objek dengan cekap dalam tatasusunan dengan berbilang sifat dan meringkaskan nilainya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!