split()
split() 매서드는 문자열을 입력받은 구분자를 기준으로 여러개로 나눈 배열을 반환해준다.
주로 코딩테스트 등에서 초기에 주어진 문자열을 원하는 배열의 형태로 바꿀때 시작하는 느낌으로 많이 사용한다.
실무에서는 DB에서 받은 데이터가 예를들어 | 라던지 , 로 구분된 문자열을 배열로 변경하는데 자주 사용된다.
음.. 예를들면 "B00|B001|AN001|ZA023" 등의 코드정보가 담긴 문자열을 받았을 때,
"|" 를 구분자로 활용해 ["B00", "B001", "AN001", "ZA023"] 와 같은 배열을 얻어낼 수 있다.
구문
String.split()
String.split(separator)
String.split(separator, limit)
매개변수
- separator
원본 문자열을 나눌 구분자를 입력합니다. 문자열, 혹은 정규식이 들어올 수 있습니다.
아무것도 입력하지 않을 경우 해당 문자열 전체가 하나의 원소인 배열을 반환합니다.
ex) "abcd". split() : ["abcd"]
"" : 빈문자열을 입력할 경우 각각의 문자가 원소인 배열을 반환받습니다.
ex) "abcd". split("") : ["a","b","c","d"]
만약 separator이 문자열의 처음이나 끝에 위치 한다면 빈문자열이 생성됩니다.
ex) "abcd". split("a") : ["","bcd"]
같은 원리로, 원본문자열 전체가 separator로 지정될 경우 빈문자열 두개가 반환됩니다.
ex) "abcd". split("abcd") : ["",""] - limit
separator로 나뉜 문자열의 최대 갯수를 지정합니다.
ex) "abcd".split("", 2) : ["a","b"]
자주 사용되진 않습니다.
사용예제 - 기본
const originString = "Hello world";
const emptySplit = originString.split();
console.log(emptySplit)
//['Hello world']
const emptyStringSplit = originString.split("");
console.log(emptyStringSplit);
//['H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
const StringSplit1 = originString.split(" ");
const StringSplit2 = originString.split("w");
console.log(StringSplit1);
console.log(StringSplit2);
//['Hello', 'world']
//['Hello ', 'orld']
const firstSplit = originString.split("H");
console.log(firstSplit)
//['', 'ello world']
const lastSplit = originString.split("d");
console.log(lastSplit)
//['Hello worl', '']
const wholeSplit = originString.split("Hello world");
console.log(wholeSplit)
//['', '']
위의 separator 의 몇가지 예제를 살펴보았다. 아직 내가 별 다른 응용방법을 몰라서 그런걸수도있겠지만,
보통 특정 구분자를 기준으로 자르는것 외에는 많이 사용하지 않는다.
사용예제 - 정규식
포스팅을 작성하려고 mdn문서를 보다가 정규식을 구분자로 사용할 수 있는걸 알게됐다.
const originString2 = "aaaa 123 b2b3 cc1 333ddd";
const regExpSplit = originString2.split(/[^0-9]/);
console.log(regExSplit)
//['', '', '', '', '', '123', '', '2', '3', '', '', '1', '333', '', '', '']
const regExpSplitType2 = originString2.split(/([^0-9])/);
console.log(regExpSplitType2)
['', 'a', '', 'a', '', 'a', '', 'a', '', ' ', '123', ' ', '', 'b', '2', 'b', '3', ' ', '', 'c', '', 'c', '1', ' ', '333', 'd', '', 'd', '', 'd', '']
const regExpSplit2 = originString2.split(/[a,b]/);
console.log(regExSplit2)
//['', '', '', '', ' 123 ', '2', '3 cc1 333ddd']
정규식 특성상 일치하는 모든 문자를 대상으로 잡는거 같은데..
공백이 왜저렇게 많이 생기는지는 모르겠다. 어차피 문자를 제외한 부분을 얻고 싶다면
split 매서드를 단독으로 사용한다기보다 기본적으로 배열로 변경 한 뒤 map(), filter(), 혹은 reduce()등의
매서드를 이용하는게 좀더 편해보인다.
사용예제 - Array 매서드와 조합해서 사용하기
반환값이 Array인만큼 Array의 강력한 매서드들과 조합하여 사용할 경우 시너지가 좋다.
예를 들어, 위의 정규식 예제에서 나온 결과값중 빈문자열을 제거하려면 다음과 같다.
const originString2 = "aaaa 123 b2b3 cc1 333ddd";
const regExpSplit = originString2.split(/[^0-9]/);
const removeSpace = regExpSplit.filter(el => el !== "");
console.log(removeSpace)
//['123', '2', '3', '1', '333']
split("")을 단순히 각각의 글자로 자르는 용도로 쓴다면..
단순히 글자를 하나하나 잘라줄 목적이라면 [...String]의 형태로도 원하는 배열을 얻어낼 수있다.
const someString = "Hello";
const splitString = someString.split("");
console.log(splitString)
//['H', 'e', 'l', 'l', 'o']
console.log([...someString])
//['H', 'e', 'l', 'l', 'o']
실사용 예제 - url에서 parameter 객체로 얻기
https://frontend-bear.tistory.com?dev=frontend&like=pizza&some=anything
위와 같은 url을 가진 페이지에서 각각의 parameter값을 담은 객체를 만들려면
window.location.search
//?dev=frontend&like=pizza&some=anything
쿼리스트링의 경우 "?"로 시작해서 "&"로 구분되어 지므로
?를 제거하고 &로 나눠주면 된다.
const search = window.location.search;
search.replace("?", "").split("&");
//['dev=frontend', 'like=pizza', 'some=anything']
이다음, reduce를 이용해보자.
const tempArr = search.replace("?", "").split("&");
tempArr.reduce((acc,cur) => {
const [key, value] = cur.split("=");
acc[key] = value;
return acc;
}, {})
//{dev: 'frontend', like: 'pizza', some: 'anything'}
split("&")을 이용해서 나눠진 배열로 만든 뒤, 각각의 원소에서 한번 더 split("=")를 이용하여
parameter의 key와 value를 구했다.
split()
split() 매서드는 문자열을 입력받은 구분자를 기준으로 여러개로 나눈 배열을 반환해준다.
주로 코딩테스트 등에서 초기에 주어진 문자열을 원하는 배열의 형태로 바꿀때 시작하는 느낌으로 많이 사용한다.
실무에서는 DB에서 받은 데이터가 예를들어 | 라던지 , 로 구분된 문자열을 배열로 변경하는데 자주 사용된다.
음.. 예를들면 "B00|B001|AN001|ZA023" 등의 코드정보가 담긴 문자열을 받았을 때,
"|" 를 구분자로 활용해 ["B00", "B001", "AN001", "ZA023"] 와 같은 배열을 얻어낼 수 있다.
구문
String.split()
String.split(separator)
String.split(separator, limit)
매개변수
- separator
원본 문자열을 나눌 구분자를 입력합니다. 문자열, 혹은 정규식이 들어올 수 있습니다.
아무것도 입력하지 않을 경우 해당 문자열 전체가 하나의 원소인 배열을 반환합니다.
ex) "abcd". split() : ["abcd"]
"" : 빈문자열을 입력할 경우 각각의 문자가 원소인 배열을 반환받습니다.
ex) "abcd". split("") : ["a","b","c","d"]
만약 separator이 문자열의 처음이나 끝에 위치 한다면 빈문자열이 생성됩니다.
ex) "abcd". split("a") : ["","bcd"]
같은 원리로, 원본문자열 전체가 separator로 지정될 경우 빈문자열 두개가 반환됩니다.
ex) "abcd". split("abcd") : ["",""] - limit
separator로 나뉜 문자열의 최대 갯수를 지정합니다.
ex) "abcd".split("", 2) : ["a","b"]
자주 사용되진 않습니다.
사용예제 - 기본
const originString = "Hello world";
const emptySplit = originString.split();
console.log(emptySplit)
//['Hello world']
const emptyStringSplit = originString.split("");
console.log(emptyStringSplit);
//['H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
const StringSplit1 = originString.split(" ");
const StringSplit2 = originString.split("w");
console.log(StringSplit1);
console.log(StringSplit2);
//['Hello', 'world']
//['Hello ', 'orld']
const firstSplit = originString.split("H");
console.log(firstSplit)
//['', 'ello world']
const lastSplit = originString.split("d");
console.log(lastSplit)
//['Hello worl', '']
const wholeSplit = originString.split("Hello world");
console.log(wholeSplit)
//['', '']
위의 separator 의 몇가지 예제를 살펴보았다. 아직 내가 별 다른 응용방법을 몰라서 그런걸수도있겠지만,
보통 특정 구분자를 기준으로 자르는것 외에는 많이 사용하지 않는다.
사용예제 - 정규식
포스팅을 작성하려고 mdn문서를 보다가 정규식을 구분자로 사용할 수 있는걸 알게됐다.
const originString2 = "aaaa 123 b2b3 cc1 333ddd";
const regExpSplit = originString2.split(/[^0-9]/);
console.log(regExSplit)
//['', '', '', '', '', '123', '', '2', '3', '', '', '1', '333', '', '', '']
const regExpSplitType2 = originString2.split(/([^0-9])/);
console.log(regExpSplitType2)
['', 'a', '', 'a', '', 'a', '', 'a', '', ' ', '123', ' ', '', 'b', '2', 'b', '3', ' ', '', 'c', '', 'c', '1', ' ', '333', 'd', '', 'd', '', 'd', '']
const regExpSplit2 = originString2.split(/[a,b]/);
console.log(regExSplit2)
//['', '', '', '', ' 123 ', '2', '3 cc1 333ddd']
정규식 특성상 일치하는 모든 문자를 대상으로 잡는거 같은데..
공백이 왜저렇게 많이 생기는지는 모르겠다. 어차피 문자를 제외한 부분을 얻고 싶다면
split 매서드를 단독으로 사용한다기보다 기본적으로 배열로 변경 한 뒤 map(), filter(), 혹은 reduce()등의
매서드를 이용하는게 좀더 편해보인다.
사용예제 - Array 매서드와 조합해서 사용하기
반환값이 Array인만큼 Array의 강력한 매서드들과 조합하여 사용할 경우 시너지가 좋다.
예를 들어, 위의 정규식 예제에서 나온 결과값중 빈문자열을 제거하려면 다음과 같다.
const originString2 = "aaaa 123 b2b3 cc1 333ddd";
const regExpSplit = originString2.split(/[^0-9]/);
const removeSpace = regExpSplit.filter(el => el !== "");
console.log(removeSpace)
//['123', '2', '3', '1', '333']
split("")을 단순히 각각의 글자로 자르는 용도로 쓴다면..
단순히 글자를 하나하나 잘라줄 목적이라면 [...String]의 형태로도 원하는 배열을 얻어낼 수있다.
const someString = "Hello";
const splitString = someString.split("");
console.log(splitString)
//['H', 'e', 'l', 'l', 'o']
console.log([...someString])
//['H', 'e', 'l', 'l', 'o']
실사용 예제 - url에서 parameter 객체로 얻기
https://frontend-bear.tistory.com?dev=frontend&like=pizza&some=anything
위와 같은 url을 가진 페이지에서 각각의 parameter값을 담은 객체를 만들려면
window.location.search
//?dev=frontend&like=pizza&some=anything
쿼리스트링의 경우 "?"로 시작해서 "&"로 구분되어 지므로
?를 제거하고 &로 나눠주면 된다.
const search = window.location.search;
search.replace("?", "").split("&");
//['dev=frontend', 'like=pizza', 'some=anything']
이다음, reduce를 이용해보자.
const tempArr = search.replace("?", "").split("&");
tempArr.reduce((acc,cur) => {
const [key, value] = cur.split("=");
acc[key] = value;
return acc;
}, {})
//{dev: 'frontend', like: 'pizza', some: 'anything'}
split("&")을 이용해서 나눠진 배열로 만든 뒤, 각각의 원소에서 한번 더 split("=")를 이용하여
parameter의 key와 value를 구했다.