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

JavaScriptで数値を降順に並べ替えつつ、0を先頭に配置する方法

数値の配列を受け取り、次の条件に従って並べ替えるJavaScript関数を作成する方法を解説します。

  • 配列に0が含まれている場合、それらはすべて先頭に配置する。
  • それ以外の数値はすべて降順(大きい順)で並べる。

具体例

たとえば、入力配列が次のようになっているとします。

const arr = [4, 7, 0, 3, 5, 1, 0];

この配列を並べ替えると、期待される出力は次のとおりです。

const output = [0, 0, 7, 5, 4, 3, 1];

実装の考え方

ここでは Array.prototype.sort() メソッドを使用します。ポイントは以下の2点です。

  • 降順ソート: 比較関数で「第2引数 − 第1引数」の差を返すことで、数値を降順に並べ替えます。
  • 0の特別扱い: 比較対象の値がfalsy(つまり0)である場合、その値の代わりに Number.MAX_VALUE を使用します。

この仕組みにより、0はあたかも「非常に大きな値」であるかのように扱われ、降順ソートの結果として自然と配列の先頭に集まります。

コード例

const arr = [4, 7, 0, 3, 5, 1, 0];
const specialSort = (arr = []) => {
    const sorter = (a, b) => {
        return (b || Number.MAX_VALUE) - (a || Number.MAX_VALUE);
    };
    arr.sort(sorter);
};
specialSort(arr);
console.log(arr);

実行結果

上記のコードを実行すると、コンソールに次の出力が表示されます。

[
    0, 0, 7, 5,
    4, 3, 1
]

補足:なぜこの方法が有効か

JavaScriptでは 0 はfalsyな値として扱われるため、論理OR演算子(||)を使うと、値が0のときだけ Number.MAX_VALUE に置き換えることができます。これにより、追加の条件分岐を書かずに、簡潔な比較関数だけで「0を先頭・それ以外を降順」という特殊なソートを実現できます。

なお、元の配列を変更せずに新しい配列として結果を得たい場合は、[...arr].sort(sorter) のようにスプレッド構文でコピーしてからソートするとよいでしょう。

  1. JavaScriptで配列の要素を同じ配列内に複製する方法

    JavaScriptでは、concat()メソッドとsort()メソッドを組み合わせることで、既存の配列の要素を同じ配列内に複製することができます。ここでは、実際に動作するサンプルコードを使って、その手順をわかりやすく解説します。 コード例 以下は、配列の要素を同じ配列内に複製するためのコード例です。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" cont

  2. JavaScriptで特定の文字列の順序に従って文字列を並べ替える方法

    問題 2つの文字列 str1 と str2 を第1・第2引数として受け取るJavaScript関数を作成する必要があります。 この関数は、str1 を str2 に含まれる文字の出現順序に従って並べ替えます。 例えば、関数への入力が以下の場合を考えてみましょう。 入力 const str1 = coding; const str2 = gncabdi; 出力 const output = gncdio; 出力の説明 str2 の中で先に現れる文字が優先的に前に配置され、その後に後から現れる文字が続きます。そして最後に、str2 に存在しない残りの文字がそのまま並べられます。 解決のアプローチ