기존의 문자열을 공백을 기준으로 나눈 후 배열로 출력하라는 문제이다.
split() 메서드는 입력해 준 값을 기준으로 문자를 나눠서 배열로 변환해주기 때문에 (' ') 공백을 입력해서 공백을 기준으로 문자를 나누게 해주었다.
split(' ')을 적용했을 때 원하는 값이 안나와서 당황했다.
공백을 기준으로 나누고 싶었는데 단순히 이렇게 작성하면
값이 [ '', 'i', '', '', '', 'love', '', 'you' ] 이런 형태로 나눈다.
공백 하나하나마다 기준으로 나눠지기 때문이였다.
좋은 방법은 아니지만 정규표현식을 찾아보았는데 쉽게 찾을 수 있었다.
split(/\s+/g) 라는 정규표현식인데 split(' ')과의 차이점을 설명해보자면
split(" "): 연속된 공백문자가 아니라, 공백 문자 하나(" ")를 구분자로 사용하여 분할
(/\s+/): 연속된 공백문자를 구분자로 인식하여 분할
(/\s+/)은 정규표현식 /\s+/를 구분자로 사용한다. 연속된 하나이상의 공백을 나타낸다.
split(" ")과는 다르게 공백문자를 일일이 따로따로 인식하는것이 아니라, 하나의 통으로 인식하기 때문에 연속된 구분자를 한번만 구분하는 split()의 특성에도 불구하고 중간에 있는 모든 공백이 제거될 수 있다.
이러이러한 이유로 정규표현식을 사용하였고, 첫번째 테스트 케이스에서 보이듯이 앞, 뒤에도 공백이 존재할 수 있으므로 앞, 뒤 공백을 제거하는 메서드 trim()을 먼저 사용해여 제거해주었다.
정규표현식을 사용하고싶지 않았던 나로서는 엄청 반가운 풀이였다. filter를 사용하겠다는 생각을 왜 못한 걸까..?
우선 filter는 배열에서 특정 조건에 부합하는 값을 찾아서, 그 값들로 새로운 배열을 만들어서 리턴한다.
따라서 my_string.split(' ')를 사용하여 공백을 기준으로 나눈 배열로 만들어주고, filter(v=> v)로 배열을 돌면서 null, undefined 값을 제거해주는 방법이다.
filter(v=> !!v)와 같은 값을 리턴한다.
추가로 알게 된 것으로는 filter(Boolean)으로도 모든 JS의 모든 거짓값을 제거할 수 있다!!