JavaScriptで文字列をアルファベット順に並べ替え、各文字を「***」で区切る方法
問題
今回は、文字列の配列を受け取るJavaScript関数を作成します。
この関数が満たすべき要件は以下のとおりです。
- 配列内の文字列をアルファベット順に並べ替える。
- 並べ替えた後の最初の文字列を取得する。
- その文字列の各文字を「
***」で区切って返す。
コード例
実際のコードは次のようになります。
const arr = ['this', 'is', 'some', 'string', 'array'];
const specialSort = (arr = '') => {
// 元の配列を変更しないようコピーを作成
const copy = arr.slice();
// アルファベット順にソート
copy.sort();
// 最初の文字列を取得
const el = copy[0];
// 各文字を分割して「***」で連結
const res = el
.split('')
.join('***');
return res;
};
console.log(specialSort(arr));出力結果
a***r***r***a***y
処理の流れの解説
このコードがどのように動作しているのか、ステップごとに見ていきましょう。
- 配列のコピー作成:
slice()を使うことで元の配列を壊さずにコピーを作成できます。引数なしで呼び出された場合もエラーにならないよう、デフォルト値として空文字列を設定しています。 - アルファベット順のソート: 引数なしの
sort()は、要素を文字列に変換してUTF-16コードユニットの順序で比較します。すべて小文字の英単語であれば、これでアルファベット順に並びます。大文字・小文字が混在する場合は、比較関数を指定して正確にソートすることをおすすめします。 - 最初の要素の取得: ソート済みの配列の先頭
copy[0]が、辞書順で最も早い文字列です。この例では'array'が該当します。 - 文字列の分割と結合:
split('')で文字列を1文字ずつの配列に分解し、join('***')で区切り文字を挟みながら再結合します。
なお、「アンダースコア(_)」など別の区切り文字を使いたい場合は、join() の引数を変更するだけで簡単に対応できます。例えば join('_') とすれば、出力は a_r_r_a_y のようになります。
-
【JavaScript】奇数はそのまま、偶数のバイナリ文字列だけを昇順に並べ替える方法
問題 空白文字で区切られた、長さ3のバイナリ(2進数)文字列を含む文字列を受け取り、処理するJavaScript関数を作成します。 要件はシンプルながら少し変わっています。数値を昇順に並べ替えるのはよいものの、並べ替えてよいのは偶数だけで、奇数はすべて元の位置にそのまま残す必要があります。 コード例 以下が実際のコードです − const str = 101 111 100 001 010; const sortEvenIncreasing = (str = ) => { const sorter = (a, b) => { &nb
-
JavaScriptで文字列内のアルファベットだけを反転する方法
問題の概要JavaScriptで、アルファベットといくつかの特殊文字(記号)が混在する文字列 str を受け取る関数を作成することを求められています。この関数は、入力文字列をもとに新しい文字列を返します。その際のルールは次のとおりです。アルファベット以外の文字(記号・数字など)は、元の位置にそのまま留まります。アルファベットの文字だけが、互いに反転した位置へ移動します。入力例と出力例たとえば、関数への入力が以下だった場合を考えてみましょう。入力const str = k_lmn_opq;出力const output = q_pon_mlk;「_」という記号は位置が変わっておらず、アルファベット