180927 TIL Lec2 학점계산기 step2

» 1막, TIL (Today I Learned)

학점계산기 step2

  • step1에서 받은 피드백 적용하고 step2 요구사항 적용하는데, 요구사항 3번을 연휴내내 풀지를 못했다..
요구사항 3
다음과 같이 정렬한 형태로 출력되도록 sortGrade 함수를 만든다. grade를 우선정렬하고, 그 안에서는 학점으로 정렬된다.

const data = [{...}, {....}., {...}];

> sortMyGrade(data);

-------------
'데이터베이스', 'A' , 3학점
'웹프로그래밍', 'A' , 3학점
'네트워크실습', 'A' , 1학점

'자료구조와 알고리즘', 'B' , 3학점
'프로그래밍 설계', 'B' , 2학점
'이산수학', 'B' , 1학점

'Java완전정복', 'D' , 3학점
'VIM으로최강속도코딩하기', 'D , 1학점
-------------
  • 객체 값에 접근해서 어떻게 정렬해야하는지, 또 같은 것끼리 묶은 뒤 학점 순으로는 어떻게 정렬해야 하는지 전 - 혀 감이 오지 않았다. ㅠㅠ
  • 반의 도움으로 해결 후 PR을 보낼 수 있었다.
  • gradePoint라는 key 값을 만들어서 정렬 후 같은 grade끼리 credit이 다르면 credit 값이 큰 것이 앞으로 오도록 수정했다.
function sortGrade(dataArr) {
    for (i = 0; i < dataArr.length; i++) {
        dataArr[i].gradePoint = fourPointFiveTable[dataArr[i]['grade']];
    }
    dataArr.sort(function (a, b) {
        return b.gradePoint - a.gradePoint;
    });
    for (i = 0; i < dataArr.length; i++) {
        for (j = 0; j < dataArr.length; j++) {
            if (dataArr[i]['grade'] === dataArr[j]['grade'] && dataArr[i]['credit'] > dataArr[j]['credit']) {
                let temp = dataArr[i];
                dataArr[i] = dataArr[j];
                dataArr[j] = temp;
            }
        }
    }
    return dataArr;
}

function print(dataArr) {
    let data = sortGrade(dataArr);
    let output = "";
    output += `-----------------------------------------\n`
    for (i = 0; i < data.length; i++) {
        output += `${data[i]['name']}, ${data[i]['grade']}, ${data[i]['credit']}학점\n`
    }
    output += `-----------------------------------------`;
    return output;
}