JavaScriptの配列を数値は昇順、文字列はアルファベット順に並べ替える方法
問題
数値と文字列が混在した配列を受け取り、数値を昇順に並べ替えた要素を先頭に、続けて文字列をアルファベット順に並べ替えた要素を配置した、単一の配列を返すJavaScript関数を作成します。
重要な条件として、各要素は元のデータ型(数値・文字列)を維持したまま扱う必要があります。つまり、数値を文字列に変換したり、その逆を行ったりしてはいけません。
入力例
[5, 8, 'car', 'dad', 'amber', 1, 12, 76, 'bat']
実装コード
以下が実際のコードです。
const arr = [5, 8, 'car', 'dad', 'amber', 1, 12, 76, 'bat'];
const separateSort = (arr = []) => {
const sorter = (a, b) => {
if(typeof a === 'number' && typeof b === 'string'){
return -1;
};
if(typeof a === 'string' && typeof b === 'number'){
return 1;
};
if(typeof a === 'string' && typeof b === 'string'){
return a.charCodeAt(0) - b.charCodeAt(0);
};
return a - b;
};
const res = arr.sort(sorter);
return res;
};
console.log(separateSort(arr));コードの解説
このコードの核心は、sort() メソッドに渡される比較関数 sorter のロジックです。typeof 演算子で要素の型を判定し、以下のルールで並び順を決定しています。
- a が数値、b が文字列の場合: -1 を返し、数値を常に文字列より前に配置します。
- a が文字列、b が数値の場合: 1 を返し、文字列を常に数値より後ろに配置します。
- 両方が文字列の場合:
charCodeAt(0)で最初の文字の文字コードを取得して比較し、アルファベット順に並べ替えます。 - それ以外(両方が数値)の場合: 通常の減算
a - bにより、数値を昇順に並べ替えます。
注意点
sort() メソッドは元の配列を破壊的に変更する点に注意してください。元の配列を保持したい場合は、[...arr].sort(sorter) のようにスプレッド構文でコピーを作成してからソートするのが安全です。
出力結果
コンソールへの出力は以下の通りです。数値が昇順で先頭に、文字列がアルファベット順で後に配置されています。
[
1, 5,
8, 12,
76, 'amber',
'bat', 'car',
'dad'
]
-
JavaScriptで文字列の二次元配列をソートして対角要素を見つける方法
本記事では、文字列の配列を扱うJavaScriptのアルゴリズム問題を解説します。「配列をアルファベット順にソートした後、対角線上の文字を抽出する」というシンプルながら応用範囲の広いテクニックを、サンプルコードとともにわかりやすく紹介します。 問題 n個の文字列を要素として持つ配列を受け取るJavaScript関数を作成します。ここで、配列内の各文字列はすべてちょうどn文字で構成されているものとします。つまり、この配列はn×nの正方行列として扱うことができます。 関数には以下の2つの処理が求められます。 まず、配列をアルファベット順(辞書順)にソートすること 次に、ソート後の配列を行列とみな
-
配列から「1・2・3」をすべて含む数値を昇順で出力する方法【C++】
この記事では、配列内の数値のうち、各桁に「1」「2」「3」をすべて含む数値だけを抽出し、昍順に出力する方法を解説します。該当する数値がひとつも存在しない場合は、-1 を出力します。入力 : arr[] = {320,123,124,125,14532,126,340,123400,100032,13,32,3123,1100} 出力 : 123 3123 14532 100032 123400この配列には「1」「2」「3」をすべて含む数値が複数存在するため、-1 は返されず、これらの3つの数字をすべて含む 5 つの値が出力されます。アルゴリズム処理の手順は以下のとおりです。開始 ステップ1 →