【JavaScript】各単語の最後の文字を基準に単語を並べ替える方法
問題
文字列を受け取り、その中に含まれる各単語を最後の文字を基準にアルファベット順へ並べ替えた結果を返すJavaScript関数を作成する必要があります。
ただし、末尾の文字が同じ単語が複数存在する場合は、元の文字列に出現した順序を維持したまま並べ替えるものとします。
アプローチ
この問題は次の手順で解決できます。
split(' ')メソッドで文字列を単語ごとの配列に分割するArray.prototype.sort()のコールバック関数で、各単語の末尾文字の文字コード(charCodeAt)を比較するjoin(' ')で配列を文字列に戻し、結果として返す
JavaScriptの sort() は仕様上安定ソートであるため、末尾の文字が同じ単語同士は元の出現順序が自動的に保たれます。
例
以下が実際のコードです。
const str = 'this is some sample string';
const sortByLast = (str = '') => {
const arr = str.split(' ');
const sorter = (a, b) => {
return a[a.length - 1].charCodeAt(0) - b[b.length - 1].charCodeAt(0);
};
arr.sort(sorter);
const sortedString = arr.join(' ');
return sortedString;
};
console.log(sortByLast(str));出力
コンソールには以下のように表示されます。
some sample string this is
コードの解説
入力文字列「this is some sample string」の各単語の末尾文字は、先頭から順に s、s、e、e、g です。これらをアルファベット順(e → g → s)に並べ替えると、まず「e」で終わる some・sample、次に「g」で終わる string、最後に「s」で終わる this・is という順序になり、期待どおりの出力が得られます。
-
JavaScriptで各単語に含まれる数字をもとに文字列を並べ替える方法
問題文を表す文字列を引数として受け取り、その内容を並べ替えた結果を返すJavaScript関数を作成する必要があります。文中の各単語には必ず1つの整数が含まれています。この関数では、最も小さい数値を持つ単語を先頭に置き、残りの単語も数値の昇順に並ぶように文字列全体を並べ替えます。コード例以下が実際の実装コードです。 { return findNumber(a) - findNumber(b); }; arr.sort(sorter); return arr.join( ); }; console.log(sortByNumber(str));出力結果Th
-
JavaScriptで隣接する同一単語のペアを数える方法
問題概要英文の文章を表す文字列 str を引数として受け取るJavaScript関数を作成します。この関数の目的は、文字列の中で隣り合って登場する同じ単語のペアがいくつあるかを数え、その個数を返すことです。比較の際には大文字と小文字を区別しないため、it と It は同一の単語としてカウントされます。入力例const str = This this is a a sample string;出力例const output = 2;出力の説明文中の This this と a a の2箇所で同じ単語が連続して現れているため、結果は 2 となります。実装コード以下が実際のコード例です。const