Giả sử chúng ta có một mảng đối tượng như sau:
const arr = [
{ region: "Africa", fruit: "Orange", user: "Gary" },
{ region: "Africa", fruit: "Apple", user: "Steve" },
{ region: "Europe", fruit: "Orange", user: "John" },
{ region: "Europe", fruit: "Apple", user: "bob" },
{ region: "Asia", fruit: "Orange", user: "Ian" },
{ region: "Asia", fruit: "Apple", user: "Angelo" },
{ region: "Africa", fruit: "Orange", user: "Gary" }
];
Chúng ta cần viết một hàm JavaScript nhận một mảng như vậy. Hàm sẽ chuẩn bị một mảng đối tượng mới gom nhóm dữ liệu dựa trên thuộc tính "region" của các đối tượng.
Hàm cũng sẽ giữ số lượng người dùng duy nhất cho một khu vực cụ thể.
Do đó, với mảng trên, đầu ra sẽ trông như:
const output = [
{ "region": "Africa", "count": 2 },
{ "region": "Europe", "count": 2 },
{ "region": "Asia", "count": 2 }
];
Ví dụ
Mã thực hiện:
const arr = [
{ region: "Africa", fruit: "Orange", user: "Gary" },
{ region: "Africa", fruit: "Apple", user: "Steve" },
{ region: "Europe", fruit: "Orange", user: "John" },
{ region: "Europe", fruit: "Apple", user: "bob" },
{ region: "Asia", fruit: "Orange", user: "Ian" },
{ region: "Asia", fruit: "Apple", user: "Angelo" },
{ region: "Africa", fruit: "Orange", user: "Gary" }
];
const groupByArea = (arr = []) => {
const res = [];
arr.forEach(el => {
let key = [el.region, el.user].join('|');
if (!this[el.region]) {
this[el.region] = { region: el.region, count: 0 };
res.push(this[el.region]);
}
if (!this[key]) {
this[key] = true;
this[el.region].count++;
}
}, Object.create(null));
return res;
}
console.log(groupByArea(arr));
Kết quả
Kết quả trong console:
[
{ region: 'Africa', count: 2 },
{ region: 'Europe', count: 2 },
{ region: 'Asia', count: 2 }
]