มีอาร์เรย์อ็อบเจ็กต์นักศึกษา ต้องการนับจำนวนครั้งที่ชื่อแต่ละคนปรากฏ
ตัวอย่างโค้ด
var details = [
{ studentName: "John", studentAge: 23 },
{ studentName: "David", studentAge: 24 },
{ studentName: "John", studentAge: 21 },
{ studentName: "John", studentAge: 25 },
{ studentName: "Bob", studentAge: 22 },
{ studentName: "David", studentAge: 20 }
];
var output = Object.values(details.reduce((obj, { studentName }) => {
if (obj[studentName] === undefined)
obj[studentName] = { studentName: studentName, occurrences: 1 };
else
obj[studentName].occurrences++;
return obj;
}, {}));
console.log(output);รันด้วยคำสั่ง:
node fileName.js
ชื่อไฟล์: demo282.js
ผลลัพธ์
PS C:\Users\Amit\javascript-code> node demo282.js
[ { studentName: 'John', occurrences: 3 }, { studentName: 'David', occurrences: 2 }, { studentName: 'Bob', occurrences: 1 } ]คำอธิบาย: ใช้ reduce() สร้างอ็อบเจ็กต์สะสมจำนวน แล้ว Object.values() แปลงเป็นอาร์เรย์
วิธีทันสมัย: ใช้ Map หรือ Array.from(new Set(...)) ร่วมกับ filter() จะกระชับกว่า