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

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'
]
  1. JavaScriptで文字列の二次元配列をソートして対角要素を見つける方法

    本記事では、文字列の配列を扱うJavaScriptのアルゴリズム問題を解説します。「配列をアルファベット順にソートした後、対角線上の文字を抽出する」というシンプルながら応用範囲の広いテクニックを、サンプルコードとともにわかりやすく紹介します。 問題 n個の文字列を要素として持つ配列を受け取るJavaScript関数を作成します。ここで、配列内の各文字列はすべてちょうどn文字で構成されているものとします。つまり、この配列はn×nの正方行列として扱うことができます。 関数には以下の2つの処理が求められます。 まず、配列をアルファベット順(辞書順)にソートすること 次に、ソート後の配列を行列とみな

  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 →