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

รวมค่าซ้ำและเพิ่มจำนวนนับสำหรับแต่ละออบเจ็กต์ในอาร์เรย์ JavaScript

สมมติว่ามีอาร์เรย์ของออบเจ็กต์ดังนี้:

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 }
}