ภาพรวม
สมมติว่าเรามีอาร์เรย์ของอ็อบเจ็กต์ดังนี้:
const arr = [
{
assigned_user: {
name: 'Paul',
id: 34158
},
doc_status: "processed"
},
{
assigned_user: {
name: 'Simon',
id: 48569
},
doc_status: "processed"
},
{
assigned_user: {
name: 'Simon',
id: 48569
},
doc_status: "processed"
}
];
เราต้องเขียนฟังก์ชันที่รับอาร์เรย์ดังกล่าว นับจำนวนคุณสมบัติ user ที่ไม่ซ้ำกัน และส่งอ็อบเจ็กต์ที่ไม่ซ้ำกันเหล่านั้นเข้าไปในอาร์เรย์ใหม่แล้วคืนค่า
ตัวอย่างโค้ด
const arr = [
{
assigned_user: { name: 'Paul', id: 34158 },
doc_status: "processed"
},
{
assigned_user: { name: 'Simon', id: 48569 },
doc_status: "processed"
},
{
assigned_user: { name: 'Simon', id: 48569 },
doc_status: "processed"
}
];
const countUnique = (arr = []) => {
let res = [];
res = arr.reduce(function (r, o) {
let user = o.assigned_user.name;
(r[user]) ? ++r[user] : r[user] = 1;
return r;
}, {}),
result = Object.keys(res).map(function (k) {
return {user: k, count: res[k]};
});
return res;
}
console.log(countUnique(arr));
ผลลัพธ์ในคอนโซล
{ Paul: 1, Simon: 2 }