Rumah > hujung hadapan web > tutorial js > Bagaimana untuk mengelompokkan objek dengan cekap dalam tatasusunan dengan berbilang sifat dan meringkaskan nilainya?

Bagaimana untuk mengelompokkan objek dengan cekap dalam tatasusunan dengan berbilang sifat dan meringkaskan nilainya?

Barbara Streisand
Lepaskan: 2024-11-08 15:53:02
asal
327 orang telah melayarinya

How to efficiently group objects in an array by multiple properties and summarize their values?

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

Pertimbangan Utama :

  • Kenal pasti gabungan unik bagi sifat bentuk dan warna.
  • Ringkaskan nilai yang digunakan dan contoh untuk objek dengan gabungan yang sama.

Penyelesaian:

Memanfaatkan Array#reduce, kita boleh lelaran melalui tatasusunan sambil mengekalkan objek pembantu untuk menjejak kombinasi bentuk-warna.

Untuk setiap objek:

  • Bina kunci unik berdasarkan bentuk dan sifat warna.
  • Jika kunci tidak ditemui dalam objek pembantu:

    • Buat objek baharu sebagai salinan objek semasa.
    • Tambahkannya pada objek pembantu.
    • Sertakan dalam tatasusunan hasil.
  • Jika kunci sudah ada dalam objek pembantu:

    • Tambahan yang digunakan dan nilai contoh untuk objek sedia 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);
Salin selepas log masuk

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

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!

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