Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

JavaScript: Trả về mục mảng có điểm số lớn nhất


Chúng ta có mảng các mảng chứa điểm số của học sinh theo môn học:

const arr = [ ['Math', 'John', 100], ['Math', 'Jake', 89], ['Math', 'Amy', 93], ['Science', 'Jake', 89], ['Science', 'John', 89], ['Science', 'Amy', 83], ['English', 'John', 82], ['English', 'Amy', 81], ['English', 'Jake', 72] ];

Cần viết hàm nhận mảng này và trả về mảng đối tượng, mỗi đối tượng đại diện cho một môn học và chứa thông tin học sinh đạt điểm cao nhất môn đó.

Dưới đây là mã:

Ví dụ

const arr = [ ['Math', 'John', 100], ['Math', 'Jake', 89], ['Math', 'Amy', 93], ['Science', 'Jake', 89], ['Science', 'John', 89], ['Science', 'Amy', 83], ['English', 'John', 82], ['English', 'Amy', 81], ['English', 'Jake', 72] ]; const groupScore = arr => { return arr.reduce((acc, val, index, array) => { const [sub, name, score] = val; const ind = acc.findIndex(el => el['Subject'] === val[0]); if(ind !== -1){ if(score > acc[ind]["Top"][0]["score"]){ acc[ind]["Top"] = [{ "name": name,"score": score }]; }else if(score === acc[ind]["Top"][0]["score"]){ acc[ind]["Top"].push({ "name": name,"score": score }); } }else{ acc.push({ "Subject": sub,"Top": [{"name": name, "score": score}] }); }; return acc; }, []); }; console.log(JSON.stringify(groupScore(arr), undefined, 4));

Kết quả

Đầu ra trong console sẽ là:

[ { "Subject": "Math", "Top": [ { "name": "John","score": 100 } ] }, { "Subject": "Science", "Top": [ { "name": "Jake", "score": 89 }, { "name": "John", "score": 89 } ] }, { "Subject": "English", "Top": [ { "name": "John", "score": 82 } ] } ]