본문 바로가기

TIL

TIL 23.07.25 객체의 length

문제점

 

타입스크립트 강의를 듣던 중, 아래의 평점을 구하는 함수를 작성해야 했음.

 

interface Student {
  name: string;
  age: number;
  scores: {
    korean: number;
    math: number;
    society: number;
    science: number;
    english: number;
  };
}

 

아래와 같이 작성해도 답이 나올 수 있겠지만 만약 과목의 수가 바뀌면 ? 😧 5,6,7... 매번 하드코딩해서 과목의 수를 작성할 수도 없음. 

 

function calculateAverage(student: Student): number {
  const sum =
    student.scores.korean +
    student.scores.math +
    student.scores.society +
    student.scores.science +
    student.scores.english;
  const average = sum / 5;
  return average;
}

 

시도해본 것

 

sum / scores.length <-- 당연히 배열의 프로퍼티를 객체에 가져다 쓰니 에러남.. 안될줄 알면서도 혹시나 해서 해봄.

 

해결방안

 

다음과 같이 작성하면 Object.keys(sudent.scores) 가 배열이 되어 length 프로퍼티를 사용할 수 있었다. 

Object.keys() 함수는 객체 내 특성 속성을 이루는 값들을 배열로 변환한다. Object.keys(student.scores) 를 출력해보면 korean,math,society,science,english 형태로 나온다.

const average = sum / Object.keys(student.scores).length;

 

알게된 것

객체를 배열로 바꿔서 length 를 구하는 방법을 오늘 처음 알게되어 의미있던것 같다. 그동안 배열이나 문자열의 길이만을 length 프로퍼티로 구했었는데 새로운 접근방법을 알게되어서 좋았다.