Rumah >hujung hadapan web >tutorial js >Bagaimanakah saya boleh mengumpulkan dan mengagregat objek dengan cekap dalam tatasusunan dengan berbilang sifat?

Bagaimanakah saya boleh mengumpulkan dan mengagregat objek dengan cekap dalam tatasusunan dengan berbilang sifat?

Linda Hamilton
Linda Hamiltonasal
2024-11-14 16:06:02607semak imbas

How can I efficiently group and aggregate objects in an array by multiple properties?

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:

  1. Jika kunci itu wujud, kami hanya menambah nilai 'terpakai' dan 'contoh' objek yang sepadan dalam pembantu.
  2. Jika kunci tidak wujud, kami mencipta objek baharu dengan salinan asal dan menambahnya pada objek pembantu menggunakan Object.assign(). Kami juga menolak objek ini ke dalam tatasusunan hasil.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn