文字列を1文字ずつ配列に入れる【JavaScript】

String.prototype.split()

var str = '分割する文字列';
var ret = str.split('');
console.log(ret);       // ["分", "割", "す", "る", "文", "字", "列"]

※2バイトを超える文字を含む場合、問題が発生する

Array.from()

var str = '分割する文字列';
var ret = Array.from(str);
console.log(ret);       // ["分", "割", "す", "る", "文", "字", "列"]

スプレッド構文

var str = '分割する文字列';
var ret = [...str];
console.log(ret);       // ["分", "割", "す", "る", "文", "字", "列"]

補足(2バイトを超える文字)

2バイトを超える文字(例:絵文字・韓国語・タイ語)を使用する場合、上記のString.prototype.split()で問題が発生します。具体的な例を次に示します。

var str = '文字列😀';
console.log(str.split(''));     // [ "文", "字", "列", "\ud83d", "\ude00" ]
console.log(Array.from(str));   // [ "文", "字", "列", "😀" ]
console.log([...str]);          // [ "文", "字", "列", "😀" ]

Stringの標準的な関数では、2バイトを超える文字を正常に扱えないため、上記のように2バイトの文字として処理してしまいます。他にも次のような問題があります。

var str = '😀😀😀';
console.log(str.length);        // 6
console.log(str[0]);            // �
console.log(str.charAt(0));     // �
console.log(str.slice(1, 2));   // �

参考

コメント