array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
function solution(arr, divisor) {
const answer = arr.filter((value)=> value % divisor === 0).sort((a,b)=>a-b);
return answer.length === 0 ? [-1] : answer;
}
첨에 map으로 하려고 하다가 filter함수가 생각나서 바로 바꿔서 풀었다! 아 그리고 이번에 알게 된 점은 sort()
함수는 기본적으로 오름차순으로 하는 줄 알았는데, 첫번째 케이스에서 결과가 [10, 5]
로 되길래 찾아보니깐 숫자라도 문자로 변환되고 유니코드 포인트 값에 의해서 정렬된다.
예를들어 [5, 33, 17, 1000].sort()
의 결과는 [1000, 17, 5, 33]
이다. 이거 잘못하다가 원하지 않는 결과를 초래할 수 있겠다. 발견하길 잘했다는 생각이 든다!
숫자를 정렬하고 싶다면 정렬 옵션으로 콜백 함수를 넣어 주어야 한다!
function solution(arr, divisor) {
var answer = arr.filter(v => v%divisor == 0);
return answer.length == 0 ? [-1] : answer.sort((a,b) => a-b);
}
// 또 다른 풀이
function solution(arr, divisor) {
var answer = [];
arr.map((o) => {
o % divisor === 0 && answer.push(o);
})
return answer.length ? answer.sort((a, b) => a - b) : [-1];
}
첫 번째는 내가 푼 방법과 똑같았다. 다만 코드가 옆으로 길지 않아서 더 깔끔해보인다.
두 번째는 내가 처음에 생각했던 방법과 비슷하게 푼 것 같다.
약간의 차이점이라면 o % divisor === 0 && answer.push(o);
부분에서 AND 연산자(&&)
를 이용해서 배열에 넣어준 부분! 굿굿굿~
참고 자료 및 사이트 (감사합니다)