Mengumpul dan Mengagregatkan objek dengan cekap dalam Tatasusunan dengan Pelbagai Sifat
Dalam artikel ini, kami menangani tugas kritikal: Mengumpulkan objek dalam tatasusunan dengan berbilang sifat dan mengagregatkan nilainya.
The Cabaran
Mengumpulkan objek dalam tatasusunan berdasarkan berbilang kriteria boleh menjadi masalah yang membingungkan. Walaupun penyelesaian sedia ada boleh mengumpulkan objek dengan berbilang kunci, ia sering gagal untuk menggabungkan dan menghapuskan pendua dengan berkesan. Matlamat kami adalah untuk mencipta penyelesaian yang menghimpunkan objek mengikut bentuk dan warna dengan lancar, menjumlahkan nilai 'terpakai' dan 'contoh' masing-masing serta menghapuskan pendua.
Penyelesaian
Pendekatan kami menggunakan kaedah array.reduce() bersama-sama dengan objek pembantu. Untuk setiap objek dalam tatasusunan, kami membina kunci unik dengan menggabungkan bentuk dan warnanya. Kami kemudian menyemak sama ada kunci ini wujud dalam objek pembantu kami:
Dengan menggunakan objek pembantu untuk menjejak kombinasi unik bentuk dan warna, kami mengumpulkan dan mengagregatkan objek secara berkesan sambil menghapuskan pendua.
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);
Output
Dengan melaksanakan penyelesaian ini, kami memperoleh hasil yang diingini:
[{"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}]
Ini secara berkesan mengumpulkan objek mengikut bentuk dan warna, merumuskan nilainya dan mengalih keluar pendua.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengumpulkan dan mengagregat objek dengan cekap dalam tatasusunan dengan berbilang sifat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!