
answer 배열에 divisor로 나눠지는 element를 담고, 만약 하나도 없다면 배열에 -1을 담아 반환하는 식을 작성하는데
return (answer === []) ? answer.push(-1) : answer.sort((a,b) => a-b);
이렇게 코드를 짰더니 answer이 빈 배열인 테스트 케이스에서 통과하지 않았다.
두 가지 틀린 부분이 있었다.
위의 코드에서 answer 배열이 비어있는지 확인하기 위해 answer === []로 비교식을 사용했다. 하지만 이 비교식은 항상 false를 반환한다. 배열을 비교할 때에는 === 대신 length 속성을 사용하여 비교해야 한다.
따라서 answer.length === 0으로 수정하여 배열이 비어있는지 확인하는 식으로 변경했다.
.push() 메소드의 반환값은 배열의 길이이므로, answer.push(-1)을 실행한 후에는 answer 배열의 길이를 반환한다. -1이 담긴 배열을 반환하기 위해 [-1]로 변경했다.
function solution(arr, divisor) { let answer = []; for(let i = 0; i < arr.length; i++) { if(arr[i]%divisor === 0) { answer.push(arr[i]); } } return (answer.length === 0) ? [-1] : answer.sort((a,b) => a-b); }
function solution(arr, divisor) { let answer = arr.filter((n) => n%divisor === 0) return (answer.length === 0) ? [-1] : answer.sort((a,b) => a-b); }
.filter() 메서드를 사용하다 콜백함수를 화살표함수로 작성하는 과정에서 중괄호의 유무에 따른 함수의 동작방식이 달라졌다.
중괄호를 사용하지 않은 경우, 화살표 함수는 단일 표현식을 반환한다. 예를 들어,n % divisor === 0와 같은 표현식은 그 자체가 값으로 평가되어 반환된다.
하지만 중괄호를 사용한 경우, 화살표 함수는 명시적인 return 문을 사용하여 값을 반환해야 한다. 중괄호 내부에서는 코드 블록이 실행되며, return 문을 사용하여 반환할 값을 지정해주어야 한다.
let answer = arr.filter((n) => n % divisor === 0);
let answer = arr.filter((n) => { return n % divisor === 0; });
두 코드는 기능적으로 동일하게 작동하지만, 중괄호를 사용한 경우에는 명시적인 return 문을 사용하여 값을 반환해야 한다.
따라서, filter() 함수를 사용할 때에는 중괄호를 사용하지 않거나 사용하여 코드를 작성할 수 있다