Làm sao group lớp học và học sinh?

Mình có danh sách thế này :

var hss=[
    {id:1,ten:"aaa",lop_id:1,lop_ten:"Mot"},
    {id:2,ten:"bbb",lop_id:1,lop_ten:"Mot"},
    {id:3,ten:"ccc",lop_id:2,lop_ten:"Hai"},
    {id:4,ten:"ddd",lop_id:2,lop_ten:"Hai"},
    {id:5,ten:"eee",lop_id:2,lop_ten:"Hai"},
]

Bây giờ muốn biến nó thế này

var lops=[
    {lop_id:1,lop_ten:"Mot",list:[
        {id:1,ten:"aaa"},
        {id:2,ten:"bbb"},
    ]},
    {lop_id:2,lop_ten:"Hai",list:[
        {id:3,ten:"ccc"},
        {id:4,ten:"ddd"},
        {id:5,ten:"eee"},
    ]},
]

Có anh chị em nào giúp đỡ với. Cám ơn trước

Tạo ra một mảng các lớp, trong một lớp tạo ra một mảng các học sinh. Rồi lặp danh sách học sinh, kiểm tra lop_id bằng 1 thì bỏ vào danh sách học sinh của lớp 1, bằng 2 bỏ vào danh sách hs của lớp 2.

Bạn giúp mình lấy mảng các lớp thôi, cám ơn
[
{lop_id:1,lop_ten:“Mot”},
{lop_id:2,lop_ten:“Hai”},
]

Sao mới cái này đã thấy chua như giấm nhỉ!!!
Vậy là bài này chắc phải duyệt 2 vòng for à.

lops = [
{lop_id:1,lop_ten:“Mot”, dsHocSinh: [] },
{lop_id:2,lop_ten:“Hai”, dsHocSinh: [] }
]
Ví dụ : Để lấy id lớp 1 thì : lops[0][‘lop_id’]. Lặp cái danh sách học sinh thôi. lop_id của học sinh bằng với lop_id của lớp nào thì push nó vào dsHocSinh của lớp đó

lop1 = hss.filter( v => v["lop_id"] == 1 );
kq = lop1.reduce( (lops,l)=>{
	lops["lop_id"] = l["lop_id"];
	lops["lop_ten"] = l["lop_ten"];
	if(!lops["list"]) lops["list"] = [];
    //đoạn này bạn tách id và tên từ biến `l` ra cho vào 1 object mới rồi push vào list là ok
	lops["list"].push(l);
	return lops;
},{});
console.log(kq);
1 Like

thế nhỡ nó có n lớp thì làm sao?

var lops = hss.reduce(function(lops, hs){
	var lop = lops.dict[hs.lop_id];
	if (!lop){
       lop = {id: hs.lop_id, lop_ten: hs.lop_ten, list:[]};
       lops.dict[hs.lop_id] = lop;
       lops.list.push(lop);
    }
    lop.list.push({id:hs.id, ten:hs.ten});
    return lops;
}, {list: [], dict: {}}).list;

lợi dụng tính chất tham chiếu của object là được thôi

2 Likes
[
  {
    "id": 1,
    "lop_ten": "Mot",
    "list": [
      {
        "id": 1,
        "ten": "aaa"
      },
      {
        "id": 2,
        "ten": "bbb"
      }
    ]
  },
  {
    "id": 2,
    "lop_ten": "Hai",
    "list": [
      {
        "id": 3,
        "ten": "ccc"
      },
      {
        "id": 4,
        "ten": "ddd"
      },
      {
        "id": 5,
        "ten": "eee"
      }
    ]
  }
]

Vi diệu thật bạn ạ, thousand thk!!!
Sao có thể viết được dòng code này!!!

Bạn làm nhiều sẽ quen thôi có gì đâu. Bạn cứ chăm chỉ thực hành thì sẽ kết hợp nhuần nhuyễn được các kiến thức với nhau :v:

3 Likes

Có cái tool nào viết đoạn code này không bạn? Cái này có vẻ là một cặp quan hệ rất nhiều trong thực tế, ví dụ như lớp-học sinh ; Thành phố - quận ; animals-animal ;…

Is-A voi has-A thoi, cai nay chuan bi cau truc du lieu tot thi de implement thoi

1 Like

Mình cảm giác nó có thể tổng quát hóa trong các quan hệ
Ví dụ:
Quan hệ lớp học và học sinh
Quan hệ hóa đơn và chi tiết hóa đơn
Quan hệ catalog và product

May cai nay Orm framework nao cung lam duoc het ma, -.#

2 Likes

ok đồng ý với bạn nhưng cái codeigniter dường như không thấy nó làm

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?