Rumah > hujung hadapan web > tutorial js > Bagaimana untuk Menghimpunkan Objek mengikut Pelbagai Sifat dan Nilai Agregat dalam JavaScript?

Bagaimana untuk Menghimpunkan Objek mengikut Pelbagai Sifat dan Nilai Agregat dalam JavaScript?

Mary-Kate Olsen
Lepaskan: 2024-11-09 06:07:02
asal
1036 orang telah melayarinya

How to Group Objects by Multiple Properties and Aggregate Values in JavaScript?

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);
Salin selepas log masuk

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 }
]
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan