Computer >> Máy Tính >  >> Lập trình >> Javascript

Hợp nhất các bản sao và tăng số lượng cho từng đối tượng trong mảng trong JavaScript

Giả sử, chúng ta có một mảng các đối tượng như thế này -

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"}
];

Chúng tôi được yêu cầu viết một hàm JavaScript có một mảng các đối tượng như vậy. Hàm sẽ đếm số lượng các đối tượng trùng lặp trong mảng (dựa trên thuộc tính "mã" của các đối tượng) và gán một thuộc tính đếm mới cho mỗi đối tượng duy nhất.

Hàm cũng nên gán một thuộc tính con cho mỗi đối tượng duy nhất có giá trị là 1 nếu tuổi (được tính bằng cách sử dụng "DOB" và ngày hiện tại) nhỏ hơn 18 tuổi, nếu không.

Ví dụ

Mã cho điều này sẽ là -

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));

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

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