絵文字を含む文字列の分割

テキストを一文字ずつ配列にいれて操作する処理をつくっていたら、

"👻⛄🥩".length
// 5
JSON.stringify("👻⛄🥩".split(''))
// '["\ud83d","\udc7b","⛄","\ud83e","\udd69"]'

まじか
3文字にならない?
絵文字を含む場合に予期せぬ挙動になることに気づいた

Array.fromかスプレッド構文を使う

JSON.stringify(Array.from("👻⛄🥩"))
JSON.stringify([..."👻⛄🥩"])
//'["👻","⛄","🥩"]'

スプレッド構文のが短くていいなと思ったんだが

型 'string' は配列型でも文字列型でもありません。反復子の反復を許可するには、コンパイラ オプション '--downlevelIteration' を使用します。

TypeScriptでとおらなかった

サロゲートペア

一文字を4バイトで表す手法

⛄って他の絵文字にくらべてそのまま使える場面が多いなと思っていたけど サロゲートペアではないからなんだなおそらく

kotobank.jp

codezine.jp

参考