String 을 Character Array로 바꾸는 방법

YunKuk Park·2021년 11월 11일

String을 내가 원하는 문자열로 바꾸는 퀘스트가 많다.
어떤 단어를 추출해야 한다던지, 정규식을 사용하여 검사를 해야 한다던지.
쿼리스트링으로 받아온 값을 object안에 넣어야 한다던지 등.

https://www.samanthaming.com/ 에 여러방법이 소개되고 있어 공부를 정리할 겸 글을 올린다.

JavaScript에서 문자열을 문자형 배열로 변환하기

String을 문자 배열로 분할 하는 방법은 split() 이 일반적이고 가장 자주 쓰는 방법이나, ES6가 되면서 더 많은 변환 방법이 추가 되었다.

const string = 'Radagast';

// Option 1
string.split('');

// Option 2
[...string];

// Option 3
Array.from(string);

// Option 4
Object.assign([], string);

// Result :
// ['R', 'a', 'd', 'a', 'g', 'a', 's', 't']

문자형배열

위의 4가지 방법 모두, 단순히 StringArray of Charcter 로 바꾸려면 가능하다.

const string = 'hello world';
 
const usingSplit = string.split('');
const usingSpread = [...string];
const usingArrayFrom = Array.from(string);
const usingObjectAssign = Object.assign([], string);

// Result
// [ 'h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd' ]

특정 구분 기호로 분리

만약 특정 단어 (&,-,_...etc)로 구분 하고 싶다면 split() 을 사용해야 한다.

const string = 'split-by-dash';

const usingSplit = string.split('-');
// ['split', 'by', 'dash']

다른 3가지 방법들은 각각의 Character 로만 분리된다.

Emoji 가 포함된 문자열

문자열에 Emoji가 있는 경우 string.split()object.assign()은 피하자!

const string = 'hello🙌';

const usingSplit = string.split('');
const usingObjectAssign = Object.assign([], string);
// ['h', 'e', 'l', 'l', 'o', '�', '�']

split 은 UTF-16 코드 단위로 문자를 구분하는데, Emoji는 UTF-8이기 때문이다.
실제로 '🙌' 이모지의 길이를 출력하면 2가 나온다.

'🙌'.length; // 2

⚠️ Object.assign 주의사항

Object.assign은 실제로 배열을 생성하지 않는다.
The Object.assign() method copies all enumerable own properties from one or more source objects to a target object

여기서 copies all enumerable own properties 라고 설명 되어있는데,
Object.assign원본 문자열에서 모든 속성을 복사 하기 때문에 String 이라는 속성도 복사하는 것이다.

즉, Object.assign([],string) 이 뱉는 결과는 string[] 이 아니라 string 이다.

profile
( • .̮ •)◞⸒⸒

0개의 댓글