var sortBy = function(arr, fn) {
return arr.sort((a, b) => fn(a) - fn(b))
}
일단 코드는 간단하다. 문제의 조건을 다시보면
fn
은 항상 숫자만 리턴하고 그 숫자로 순서를 결정한다.- output 배열은 반드시
fn
의 리턴값에 의해 오름차순으로 정렬되어야한다.즉,
fn
의 리턴값이 클 수록 배열의 뒤로 간다는 것이다.
위 사실을 이용해서 sort 메소도를 사용하면 정렬이 가능하다.
sort 메소드에 compareFunction이 제공될 경우 요소는 이 함수의 리턴값에 따라 정렬된다.
리턴값 < 0
이면 a, b 순이고리턴값 > 0
이면 b, a 순이다.
예를 들어
fn(a)
가 1이고fn(b)
가 2이면fn(a) - fn(b)
는 -1이다. 그러면 a, b 순이다.
fn(a)
가 3이고fn(b)
가 1이면fn(a) - fn(b)
는 2이다. 그러면 b, a 순이다.
우리는 오름차순으로 정렬해야하기때문에 첫 번째 코드로 작성하면 된다.