Home > Back-end >  groupby and select max id from object in react native
groupby and select max id from object in react native

Time:04-01

How to groupby and select max id from object in react native. that was just a dummy data to explain you that how my object look like

[
 {"name": "alex", "subject": "english" "student_id": "1"},
 {"name": "hales", "subject": "science" "student_id": "2"},
 {"name": "joss", "subject": "english" "student_id": "3"},
 {"name": "alexandra", "subject": "science" "student_id": "4"},
 {"name": "mark", "subject": "math" "student_id": "5"},
]

First of all I want to group by subject and then select the student with max id so my output should look like that

[
 {"name": "joss", "subject": "english" "student_id": "3"},
 {"name": "alexandra", "subject": "science" "student_id": "4"},
 {"name": "mark", "subject": "math" "student_id": "5"},
]

What I have tried So far is that

const result = myobject.reduce(function (r, a) {
      r[a.case_id] = r[a.case_id] || [];
      r[a.case_id].push(a);
      return r;
    }, Object.create(null));

with above code I can group by but not able to get the max id so how could I achieve that?

CodePudding user response:

You could group by subject and replace the value if student_id is greater.

As result take the values from the object.

const
    data = [{ name: "alex", subject: "english", student_id: "1" }, { name: "hales", subject: "science", student_id: "2" }, { name: "joss", subject: "english", student_id: "3" }, { name: "alexandra", subject: "science", student_id: "4" }, { name: "mark", subject: "math", student_id: "5" }],
    result = Object.values(data.reduce((r, o) => {
        if (!r[o.subject] ||  r[o.subject].student_id <  o.student_id) {
            r[o.subject] = o;
        }
        return r;
    }, Object.create(null)));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

  • Related