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) のようにスプレッド構文でコピーしてからソートするとよいでしょう。
-
JavaScriptで配列の要素を同じ配列内に複製する方法
JavaScriptでは、concat()メソッドとsort()メソッドを組み合わせることで、既存の配列の要素を同じ配列内に複製することができます。ここでは、実際に動作するサンプルコードを使って、その手順をわかりやすく解説します。 コード例 以下は、配列の要素を同じ配列内に複製するためのコード例です。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" cont
-
JavaScriptで特定の文字列の順序に従って文字列を並べ替える方法
問題 2つの文字列 str1 と str2 を第1・第2引数として受け取るJavaScript関数を作成する必要があります。 この関数は、str1 を str2 に含まれる文字の出現順序に従って並べ替えます。 例えば、関数への入力が以下の場合を考えてみましょう。 入力 const str1 = coding; const str2 = gncabdi; 出力 const output = gncdio; 出力の説明 str2 の中で先に現れる文字が優先的に前に配置され、その後に後から現れる文字が続きます。そして最後に、str2 に存在しない残りの文字がそのまま並べられます。 解決のアプローチ