Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

นับจำนวนครั้งที่ค่า Property ซ้ำใน Array of Objects ด้วย reduce()

ใช้ reduce() ร่วมกับ Map นับความถี่ของ property

สร้าง Map นับ frequency ของ subjectName ในอาร์เรย์ออบเจกต์

ตัวอย่างโค้ด

const subjectDetails = [
  { subjectId: '101', subjectName: 'JavaScript' },
  { subjectId: '102', subjectName: 'Java' },
  { subjectId: '103', subjectName: 'JavaScript' }
];

const result = [...subjectDetails.reduce((map, obj) => {
  if (map.has(obj.subjectName)) {
    map.get(obj.subjectName).frequency++;
  } else {
    map.set(obj.subjectName, { subjectName: obj.subjectName, frequency: 1 });
  }
  return map;
}, new Map()).values()];

console.log(result);

วิธีรัน

node fileName.js

ผลลัพธ์

[
  { subjectName: 'JavaScript', frequency: 2 },
  { subjectName: 'Java', frequency: 1 }
]

คำอธิบาย

  • reduce() สะสมค่าใน Map (key = subjectName, value = {subjectName, frequency})
  • Map ใช้เพื่อ key เป็น string/object ได้ และรักษาลำดับ insertion
  • .values() ดึงค่า (value) ของ Map ทั้งหมด
  • [...values()] แปลง iterator เป็นอาร์เรย์

วิธีง่ายกว่า: ใช้ Object แทน Map

const count = subjectDetails.reduce((acc, obj) => {
  acc[obj.subjectName] = (acc[obj.subjectName] || 0) + 1;
  return acc;
}, {});

console.log(count); // { JavaScript: 2, Java: 1 }