LoginSignup
18
6

More than 5 years have passed since last update.

【JavaScript】文字列を反転する方法いろいろ

Last updated at Posted at 2017-08-28

この記事で共通して使う変数

const word = 'プログラミングJavaScript';

この記事では上記の文字列を以下のように反転させたいと思います。
プログラミングJavaScript -> tpircSavaJグンミラグロプ

forループとpushとpop で頑張ってみる

const converted = [];    // 文字を格納する配列を用意する。
for (let i = 0, len = word.length; i < len; i++) {
  const char = word.charAt(i);    // インデックスの位置の一文字を取得する。
  converted.push(char);           //  要素を追加する。
}

let reversed = '';    // 反転された文字を入れる変数を用意する。
for (let i = 0, len = converted.length; i < len; i++) {
  const popped = converted.pop();    // 配列の末尾から1つ取り出す。
  reversed += popped;                // 文字を繋げる。
}
console.log(reversed);    // tpircSavaJグンミラグロプ

原始的でコーディングミスも起こしやすそう。(ループの終了条件など)
処理を追わなければ何をしているかわからないし、状態が複雑であまり美しくないです。

for...ofとunshiftで頑張ってみる

const converted = [];
for (let char of word) {    // 一文字ずつ処理する
  converted.unshift(char);    // 配列の先頭に追加する。
}
let reveresed = '';
for (let char of converted) {
  reveresed += char;
}
console.log(reveresed);    // tpircSavaJグンミラグロプ

ループ部分が先ほどよりスッキリしました。
Stringはイテラブルなのでfor...ofで扱うことができます。
けれどまだイケてるとはいいがたいです。

StringのメソッドとArrayのアクセサメソッドを使う

const reversed = word.split('')    // 空文字で分割して配列に
                     .reverse()    // 配列を反転して
                     .join('');    // 空文字で連結する
console.log(reversed);    // tpircSavaJグンミラグロプ

メソッドチェーンで繋げていますが以下と同じです。

const converted = word.split('');
const reversedArray = converted.reveresd();
const reveresdString = reversedArray.join('');

forループを使わないコードなら簡潔に書けるし間違いが入り込む要素がぐっと減ります。
見ただけで何をしているかわかります。

スプレッド演算子とArrayの反復メソッドとアロー関数を使う

const reversed = [...word].reduceRight((p, c) => p + c); // 配列に変換し右から左へたたみ込む。
console.log(reversed);    // tpircSavaJグンミラグロプ

ES6で記述したのでレガシーブラウザで動かす場合Babelなどでトランスパイルが必要かもしれません。
文字列はイテラブルなのでスプレッド演算子で展開でき、さらに配列に格納することで、文字列を配列にできます。
reduceRightでたたみ込み演算をし匿名関数はアロー関数でシンプルに記述します。

新しいシンタックスについては以下が参考になりました。

ありがとうございました!

18
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
6