สมมติว่ามีอาร์เรย์ของออบเจ็กต์ดังนี้:
const arr = [
{code: "AA", gender:"male", DOB:"2000-05-15"},
{code: "AA", gender:"female", DOB:"2015-05-15"},
{code:"A0", gender:"female", DOB:"2005-01-01"},
{code: "A1", gender:"male", DOB:"2015-01-15"}
];
เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของออบเจ็กต์ดังกล่าว ฟังก์ชันควรนับจำนวนออบเจ็กต์ที่ซ้ำกันในอาร์เรย์ (อิงจากคุณสมบัติ "code") และกำหนดคุณสมบัติ count ใหม่ให้แต่ละออบเจ็กต์ที่ไม่ซ้ำกัน
ฟังก์ชันควรกำหนดคุณสมบัติ child ให้แต่ละออบเจ็กต์ที่ไม่ซ้ำกันซึ่งมีค่า 1 หากอายุ (คำนวณจาก "DOB" และวันที่ปัจจุบัน) น้อยกว่า 18 ปี 0 มิฉะนั้น
ตัวอย่าง
โค้ดสำหรับนี้จะเป็นดังนี้:
const arr = [
{code: "AA", gender:"male", DOB:"2000-05-15"},
{code: "AA", gender:"female", DOB:"2015-05-15"},
{code:"A0", gender:"female", DOB:"2005-01-01"},
{code: "A1", gender:"male", DOB:"2015-01-15"}
];
const groupAndAdd = (arr = []) => {
const result = new Map();
let nowYear = new Date().getYear();
arr.forEach(el => {
let item = result.get(el.code) || {code: el.code, count: 0, female: 0, child: 0 };
item.count++;
item.female += el.gender === "female";
item.child += nowYear - new Date(Date.parse(el.DOB)).getYear() <18;
result.set(item.code, item);
});
return result;
};
console.log(groupAndAdd(arr));
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็นดังนี้:
Map {
'AA' => { code: 'AA', count: 2, female: 1, child: 1 },
'A0' => { code: 'A0', count: 1, female: 1, child: 1 },
'A1' => { code: 'A1', count: 1, female: 0, child: 1 }
}