JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで文字列内の文字数が奇数の単語を反転させる方法

本記事では、文字列を受け取り、その中から文字数が奇数である単語だけを反転(逆順)にして返すJavaScript関数の作成方法を解説します。

ここでいう「単語」とは、文字列内で両側がスペースに囲まれている部分、あるいは文字列の先頭・末尾に位置し、片側のみスペースで区切られている部分文字列を指します。

サンプルコード

実際のコードは以下の通りです。

const str = 'hello world, how are you';
const isOdd = str => str.length % 2 === 1;
const reverseOddWords = (str = '') => {
    const strArr = str.split(' ');
    return strArr.reduce((acc, val) => {
        if(isOdd(val)){
            acc.push(val.split('').reverse().join(''));
            return acc;
        };
        acc.push(val);
        return acc;
    }, []).join(' ');
};
console.log(reverseOddWords(str));

処理の流れ

このコードの仕組みを簡単に整理すると、次のような手順になっています。

  • split(' ') で元の文字列をスペース区切りで単語の配列に分割します。
  • reduce() を使って各単語を順番に処理し、結果用の新しい配列を作成します。
  • 補助関数 isOdd により、単語の文字数が奇数かどうかを判定します。
  • 奇数だった場合は split('').reverse().join('') で文字の並びを反転させたうえで配列に追加します。
  • 偶数の単語はそのまま追加し、最後に join(' ') で再びスペース区切りの文字列へ連結して返します。

出力結果

コンソールには以下のように表示されます。

olleh world, woh era uoy

このように、「hello」「how」「are」「you」など奇数文字の単語だけが反転され、偶数文字の「world,」は元のまま出力されていることが確認できます。

  1. JavaScriptで不正な時間文字列(HH:MM:SS)を正規化して修正する方法

    JavaScriptでは、「HH:MM:SS」形式の時間文字列を扱う場面がよくあります。しかし、時間の加算処理などで計算ミスが発生すると、分や秒が60を超えてしまう「壊れた」時間文字列が生成されることがあります。この記事では、そうした不正な時間文字列を正しく正規化する方法を解説します。 課題:壊れた時間文字列とは 今回求められるのは、JavaScriptで「HH:MM:SS」形式の時間文字列を受け取り、必要な修正を加えた上で、正しい時間文字列として返す関数を作成することです。 問題になるのは、加算処理のバグによって、次のような不正な値が含まれてしまうケースです。 MM(分)の部分が60を超え

  2. JavaScriptで配列内の正負が対応しない唯一の数値を見つける方法

    問題の概要整数の配列を受け取るJavaScript関数を作成する必要があります。この配列には、各数値に対して必ず正負が反転したペア(相方となる数値)が存在します。ただし、例外的に1つの数値だけは、そのペアとなる数値が配列内に存在しません。私たちのタスクは、そのペアを持たない唯一の数値を見つけ出して返すことです。解決のアプローチこの問題は、配列内のすべての数値を合計し、正負それぞれの出現回数の差を利用することで効率的に解けます。考え方は以下の通りです。配列内の全要素を合計します。同時に、正の数(0以上)が出たらカウントを+1、負の数が出たら-1していきます。最終的に、合計値を「正負のカウント差の