やる事
タイトルの通り。入力された文字列を2文字づつ飛ばした文字列にして出力する。Pythonほど楽じゃないけどPHPよりは簡単そう。Typescriptでもっとすごいことをやってる人がいたけど、こういうのは勢いが大事なのでやっていく。
元ネタ
触発された記事
コード
function arora(str){
return new Array(...str).filter((_,i)=>(i+1)%2===1).join("")
}
function main(){
const str = "アローラロコン"
console.log(arora(str))
}
main()
中身
まず文字列を1文字ずつの配列にする。今回はカタカナ(サロゲートペアを含まないマルチバイト文字)だけなので問題ないが、split()メソッドを使って文字列を分解するとサロゲートペアが破壊される(いわゆる「𠮷田さん」問題)ので、スプリット構文で文字列を分解して配列を作成している。(参考: String.prototype.split() - JavaScript | MDN )
new Array(...str)
// ['ア', 'ロ', 'ー', 'ラ', 'ロ', 'コ', 'ン']
次にfilter()メソッドで奇数番目の文字だけを抽出する。
new Array(...str).filter((_,i)=>i%2===1)
// ['ア', 'ー', 'ロ', 'ン']
filterメソッドのコールバック関数は第2引数にインデックスを取るので、これに1を足した数値が2で割り切れるかどうかで判別すればいい。
後はjoin()メソッドで文字列に戻せば終わり。セパレーターに空文字を指定しないとカンマ区切りで文字列になるので注意。
new Array(...str).filter((_,i)=>(i+1)%2===1).join("")
// アーロン
正規表現を使う方法もある
元ネタにあったりコメント欄で頂いたりした正規表現を使う方法。しかも「𠮷田さん」問題に対応
console.log( '🐈🙀😺'.replace(/(.)./gu, '$1') );
// 🐈😺
...きっと正規表現には無限の可能性がある。
おわり
なんか間違っていたらコメントください。
なんか記事を書くと強い人類から知識が降ってきてすごい。