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

JavaScriptで文字列の各単語から最後の母音を削除する方法

はじめに

JavaScriptでは、文字列を受け取り、その中の各単語の最後に出現する母音(a・e・i・o・u)を削除した新しい文字列を返す関数を実装することが求められることがあります。

例えば、次のような文字列が与えられたとします。

const str = 'This is an example string';

この場合、期待される出力は以下のとおりです。各単語から最後の母音が1つずつ取り除かれている点に注目してください。

const output = 'Ths s n exampl strng';

それでは、この機能を実現するコードを見ていきましょう。

実装コード

const str = 'This is an example string';
const removeLast = word => {
    const lastIndex = el => word.lastIndexOf(el);
    const ind = Math.max(lastIndex('a'), lastIndex('e'), lastIndex('i'), lastIndex('o'), lastIndex('u'));
    return word.substr(0, ind) + word.substr(ind + 1, word.length);
}
const removeLastVowel = str => {
    const strArr = str.split(' ');
    return strArr.reduce((acc, val) => {
        return acc.concat(removeLast(val));
    }, []).join(' ');
};
console.log(removeLastVowel(str));

コードの解説

処理の流れを順番に確認していきます。

  • removeLast関数:1つの単語を受け取り、lastIndexOf()を使って各母音が最後に現れる位置を調べます。Math.max()によって最も後ろ側にある母音のインデックスを特定し、substr()でその1文字だけを除外した文字列を組み立てています。
  • removeLastVowel関数:元の文字列をsplit(' ')で単語ごとに分割し、reduce()を使って各単語にremoveLastを適用した結果を配列として蓄積します。最後にjoin(' ')で再びスペース区切りの文字列へ連結して完成です。

補足:より安全な書き方

substr()は現在では非推奨(deprecated)とされているため、新しく書くコードではslice()を使用するのがおすすめです。また、この実装は小文字の母音のみに対応しているため、大文字を含む可能性がある入力には事前にtoLowerCase()で正規化するなどの工夫が必要です。

return word.slice(0, ind) + word.slice(ind + 1);

出力結果

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

Ths s n exampl strng
  1. JavaScriptで文字列内の子音だけを反転する方法

    問題の概要小文字の英字アルファベットのみで構成された文字列を引数として受け取るJavaScript関数を作成します。この関数が返すべきは、子音の並び順だけを逆順に入れ替えた新しい文字列です。母音(a・e・i・o・u)は元の位置にそのまま残ります。入力例const str = somestring;出力例子音「s, m, s, t, r, n, g」を逆順にすると「g, n, r, t, s, m, s」になり、これを母音を動かさずに元の位置へ当てはめると、次のような結果になります。const output = gonertsims;アプローチ:両端から走査するツーポインタ法この問題を効率的に解

  2. JavaScriptで文字列から指定した長さより長い単語を抽出して配列として返す方法

    問題 単語の並んだ文(文字列)と数値を受け取り、その数値で指定された長さよりも文字数が多い単語をすべて抽出し、配列として返すJavaScript関数を作成する必要があります。 入力 const str = this is an example of a basic sentence; const num = 4; 出力 const output = [ example, basic, sentence ]; これは、元の文の中で文字数が4より大きい単語が「example」「basic」「sentence」の3つしか存在しないためです。 実装例 以下がそのコードです。 const str =