처음 작성한 코드는 아래와 같다.
function solution(array) {
array.sort();
var size = Math.floor(array.length/2);
var answer = array[size];
return answer;
}
코드 실행 했을 땐 통과되었는데 채점을 하니 실패였다.
정답코드:
function solution(array) {
array.sort((a,b) => (a - b));
var size = Math.floor(array.length/2);
var answer = array[size];
return answer;
}
그렇다면 이유는 무엇이었을까?🧐
바로 array.sort();
요 자식이 문제였다.
array.sort();
를 쓰면 배열이 오름차순으로 정렬될거라 단순하게 생각했다.
하지만 내가 써야했던 코드는 arr.sort((a,b) => a-b);
이거였다.
그렇다면 둘의 차이점이 뭐던가 ..?
arr.sort()를 호출할 때 콜백 함수를 전달하지 않으면 기본적으로 배열의 요소들은 문자열로 간주되어 정렬된다.
이 경우 숫자 요소를 가진 배열을 정렬할 때는 원하는 결과를 얻지 못할 수도 있다.
예를 들어, 다음과 같은 배열이 있다고 가정해보자
var arr = [10, 2, 5, 1, 8];
arr.sort()를 호출하면 기본적으로 문자열로 변환된 요소들을 비교하여 정렬하므로 결과는 다음과 같다.
arr.sort(); // [1, 10, 2, 5, 8]
하지만 숫자로 정렬하기 위해서는 콜백 함수를 전달하여 명시적으로 숫자 비교를 수행해야 한다.
따라서, arr.sort((a, b) => a - b);와 같이 콜백 함수 (a, b) => a - b를 전달하여 숫자로 정렬할 수 있다.
이 콜백 함수는 a - b를 반환함으로써 오름차순 정렬을 수행한다.
추가적으로 보고 가면 좋을 듯 싶어서 ..👏🏻
나누기(일반적)
const num = 10 / 3 ; console.log(num) // 3.3333...
몫 구하기
몫만을 구하고 싶을 땐 나머지를 제거해주는 내림함수
Math.floor()
를 활용한다.
파이썬의 //문법과 헷갈리지 않도록 주의하기
const num = Math.floor(10 / 3) ;
console.log(num) // 3