문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.
function solution(my_string) {
let arr = [];
for(let i=0; i<my_string.length; i++) {
if(typeof (my_string[i])=="number") {
return my_string[i]
}
arr.push(my_string[i])
}
return arr
}
※ 참고로 틀린 답이다. 어디가 틀렸을까?
문자열의 인덱스에 접근하면 반환되는 값은 문자이다. 따라서 typeof가 아니라 isNaN 함수를 사용하여 숫자를 확인해야 합니다.
또한 숫자를 골라내면, 해당 숫자를 arr 배열에 추가해야 한다. 그러나 주어진 코드에서는 숫자를 찾으면 즉시 반환되기 때문에 이 부분이 수정되어야 한다. 숫자를 찾으면 arr.push 함수를 사용하여 arr 배열에 추가하도록 코드를 변경해야 한다.
function solution(my_string) {
let arr = [];
for(let i=0; i<my_string.length; i++) {
if(!isNaN(my_string[i])) {
return my_string[i]
}
arr.push(my_string[i])
}
return arr.sort((a,b)=>a-b)
}
이 코드는 isNaN 함수로 문자열의 i번째 인덱스가 숫자인지 확인하고, 숫자라면 즉시 반환하게 되어있습니다. 이로 인해 숫자를 모두 찾지 못하고, 문자열에서 첫 번째 숫자만 반환하고 함수가 종료되므로 정확한 결과를 얻을 수 없다. (이런 실수를 자주 저지른다. 아직 원리가 머릿속에 안잡혔다)
해결책은 숫자를 찾은 후 return 문을 사용하여 함수를 즉시 종료하는 것이 아니라, 숫자를 arr 배열에 추가한 후 마지막에 arr을 오름차순으로 정렬하여 반환해야한다.
function solution(my_string) {
let arr = [];
for(let i=0; i<my_string.length; i++) {
if(!isNaN(my_string[i])) {
arr.push(parseInt(my_string[i]))
}
}
return arr.sort((a,b)=>a-b)
}
function solution(my_string) {
return my_string.match(/\d/g).sort((a, b) => a - b).map(n => Number(n));
}
return 위치 연습하기. 반환을 어디에 해주느냐에 따라 값이 달라진다. return에 대한 개념을 연습할 수 있었다.