문제 설명
문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.
제한사항
입출력 예
my_string | - |
---|---|
"hi12392" | [1, 2, 2, 3, 9] |
"p2o4i8gj2" | [2, 2, 4, 8] |
"abcde0" | [0] |
입출력 예 설명
입출력 예 #1
입출력 예 #2
입출력 예 #3
function solution(my_string) {
var answer = [];
for (let i = 0; i < my_string.length; i++) {
for (let cnd = 0; cnd < 10; cnd++ ) {
if (parseInt(my_string[i]) === cnd) {
answer.push(my_string[i])
}}
}
return answer.sort((a,b) => a-b).map(answerEl => parseInt(answerEl));
}
parseInt()
적용.toString
을 적용하면 된다.map(Number)이라는 더 간단한 방법을 나중에 알게 됐다. 😅
sort()
메소드로 오름차순으로 배열을 정렬해주고map()
메소드로 각 캐릭터들을 호출하여 정수로 변환시켜준다.typeof()
메소드도 사용해보고, toNumber
, isNaN
도 써봤지만 해결되지 않아 진땀을 뺐다. 그런데 배열의 각 요소나 캐릭터의 타입 변환을 map()
메소드로 변환시킬 수 있다는 사실을 발견하고 적용하니 금방 해결할 수 있었다.(1)
function solution(my_string) {
return Array.from(my_string).filter(v => !isNaN(+v)).sort((a,b) => a - b).map(v => +v);
}
Array.from()
으로 my_string 객체를 우선 배열로 만들어준다.!isNaN(+v)
: 문자열에+
를 덧붙여주면 숫자로 변환된다.map()
메소드로 다시 각 요소들을 호출해 숫자로 변환시켰는데.. 아마 앞에서 재배열 된 객체 배열은 string 타입의 '숫자'들로 이루어진 것이기 때문에 이 코드가 추가된 것이 아닐까 싶다.(2)
function solution(my_string) {
return my_string.match(/\d/g).sort((a, b) => a - b).map(n => Number(n));
}