Dưới đây là mã để nhóm (group) các đối tượng dựa trên một giá trị thuộc tính trong JavaScript.
Ví dụ
<!DOCTYPE html> <html lang="vi"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Group objects</title> <style> body { font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; } .result { font-size: 18px; font-weight: 500; color: rebeccapurple; } </style> </head> <body> <h1>Nhóm đối tượng dựa trên giá trị trong JavaScript</h1> <div class="result"> { name: 'Rohan', age: 18 }, { name: 'Mohan', age: 20 }, { name: 'Shawn', age: 18 }, { name: 'Michael', age: 18 }, { name: 'David', age: 20 } </div> <button class="Btn">NHẤN VÀO ĐÂY</button> <h3>Nhấn nút để nhóm các đối tượng trên theo tuổi</h3> <script> let resEle = document.querySelector(".result"); let BtnEle = document.querySelector(".Btn"); const people = [ { name: "Rohan", age: 18 }, { name: "Mohan", age: 20 }, { name: "Shawn", age: 18 }, { name: "Michael", age: 18 }, { name: "David", age: 20 }, ]; let groupBy = (array, key) => { return array.reduce((result, obj) => { (result[obj[key]] = result[obj[key]] || []).push(obj); return result; }, {}); }; let a = groupBy(people, "age"); BtnEle.addEventListener("click", () => { console.log(a); }); </script> </body> </html>
Kết quả
Mở console (F12) để xem kết quả:
{ 18: [ {name: "Rohan", age: 18}, {name: "Shawn", age: 18}, {name: "Michael", age: 18} ], 20: [ {name: "Mohan", age: 20}, {name: "David", age: 20} ] }
Hàm groupBy dùng reduce để gom nhóm: tạo object với key là giá trị thuộc tính nhóm, value là mảng các đối tượng có key đó. Đây là pattern phổ biến cho data processing.