Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Mencantumkan Objek JavaScript dengan Kekunci Padanan dengan Cekap dan Menjumlahkan Nilainya?

Bagaimana untuk Mencantumkan Objek JavaScript dengan Kekunci Padanan dengan Cekap dan Menjumlahkan Nilainya?

Linda Hamilton
Linda Hamiltonasal
2024-12-08 05:51:09395semak imbas

How to Efficiently Merge JavaScript Objects with Matching Keys and Sum Their Values?

Menggabungkan Objek dengan Sifat Padanan dalam Tatasusunan JavaScript

Pertimbangkan tatasusunan objek berikut:

objArr = [
    {key:"Mon Sep 23 2013 00:00:00 GMT-0400", val:42},
    {key:"Mon Sep 24 2013 00:00:00 GMT-0400", val:78},
    {key:"Mon Sep 25 2013 00:00:00 GMT-0400", val:23},
    {key:"Mon Sep 23 2013 00:00:00 GMT-0400", val:54}, // <- duplicate key
]

Matlamat kami adalah untuk menggabungkan kunci pendua dan jumlahkan nilai masing-masing, menghasilkan:

reducedObjArr = [
    {key:"Mon Sep 23 2013 00:00:00 GMT-0400", val:96},
    {key:"Mon Sep 24 2013 00:00:00 GMT-0400", val:78},
    {key:"Mon Sep 25 2013 00:00:00 GMT-0400", val:23}
]

Sementara percubaan awal mungkin melibatkan lelaran dan menolak nilai, pendekatan yang lebih cekap melibatkan memanfaatkan fungsi terbina dalam JavaScript:

// Use a Map to count values with the same key
const counts = objArr.reduce((prev, curr) => {
  let count = prev.get(curr.key) || 0;
  prev.set(curr.key, curr.val + count);
  return prev;
}, new Map());

// Convert the Map back to an array of objects
const reducedObjArr = [...counts].map(([key, value]) => {
  return {key, value};
});

Kaedah ini mengurangkan tatasusunan kepada Peta di mana kunci mewakili nilai kunci pendua dan nilai mewakili jumlahnya . Peta kemudiannya ditukarkan kembali kepada tatasusunan objek untuk kebolehbacaan.

Atas ialah kandungan terperinci Bagaimana untuk Mencantumkan Objek JavaScript dengan Kekunci Padanan dengan Cekap dan Menjumlahkan Nilainya?. 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