Rumah > hujung hadapan web > tutorial js > Bagaimanakah anda mengumpulkan objek JavaScript dengan berbilang sifat dan menjumlahkan nilainya?

Bagaimanakah anda mengumpulkan objek JavaScript dengan berbilang sifat dan menjumlahkan nilainya?

Mary-Kate Olsen
Lepaskan: 2024-11-11 03:30:03
asal
209 orang telah melayarinya

How do you group JavaScript objects by multiple properties and sum their values?

Mengumpulkan Objek Mengikut Berbilang Sifat dan Menjumlahkan Nilainya

Dalam JavaScript, adalah perkara biasa untuk berfungsi dengan tatasusunan objek. Kadangkala, adalah perlu untuk mengumpulkan objek ini mengikut berbilang sifat semasa melakukan pengiraan pada nilainya, seperti merumuskan sifat tertentu.

Ikhtisar Masalah

Diberikan tatasusunan objek , kami menyasarkan untuk mengumpulkannya berdasarkan dua sifat (bentuk dan warna). Walau bagaimanapun, kami mahu menganggap objek sebagai pendua hanya jika bentuk dan warnanya sepadan. Matlamatnya adalah untuk merumuskan sifat yang digunakan dan kejadian objek dalam setiap kumpulan dan mengalih keluar sebarang pendua.

Hasil Jangkaan

Menggunakan tatasusunan sampel berikut:

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

Kami menjangkakan untuk mendapatkan tatasusunan dengan empat kumpulan:

[{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 Menggunakan Array#reduce dan Object#assign

Untuk mencapai ini, kita boleh menggunakan kaedah Array#reduce JavaScript untuk mengulangi tatasusunan objek. Untuk setiap objek, kami membina kunci unik dengan menggabungkan sifat bentuk dan warna. Kami kemudiannya menggunakan objek tambahan, pembantu, untuk menjejaki objek berkumpulan.

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

Jika kunci tidak wujud dalam objek pembantu, kami menambah entri baharu menggunakan Object.assign() untuk mencipta salinan baharu objek semasa. Kami kemudian menolak objek baharu ini ke dalam tatasusunan hasil.

Jika kunci sudah wujud dalam pembantu, ini bermakna kami telah menemui pendua. Dalam kes ini, kami hanya menambah sifat terpakai dan kejadian bagi objek yang sepadan dalam pembantu.

Akhir sekali, kami mengembalikan tatasusunan hasil, yang secara berkesan mengumpulkan objek mengikut bentuk dan warna sambil menjumlahkan nilainya.

Atas ialah kandungan terperinci Bagaimanakah anda mengumpulkan objek JavaScript dengan berbilang sifat dan menjumlahkan nilainya?. 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