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
Lepaskan: 2024-11-14 16:06:02
asal
595 orang telah melayarinya

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

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

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!

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