JavaScriptでundefined(未定義値)を含む配列をソートする方法
undefinedを含む配列をソートするには
JavaScriptでは、sort()メソッドを使うことで、文字列とundefinedが混在する配列でも簡単に並べ替えることができます。
まず、次のように文字列値とundefinedが混ざった配列を用意します。
var studentNames = ["Mike", undefined, "Adam", "Bob", undefined, "Carol"];
この配列に対してsort()を使用します。sort()には比較関数(コールバック関数)を渡すことができ、ここでは昇順に並べ替えるための独自のロジックを実装しています。
コード例
var studentNames = ["Mike", undefined, "Adam", "Bob", undefined, "Carol"];
var sortingInAscendingOrder = (first, second) => {
if (first === "") return 1;
if (second === "") return -1;
return first.localeCompare(second);
};
studentNames.sort(sortingInAscendingOrder);
console.log(studentNames);上記のプログラムを実行するには、Node.jsで次のコマンドを使用します。
node fileName.js
ここでは、ファイル名を「demo275.js」として保存しています。
実行結果
コンソールには次のような出力が表示されます。
PS C:\Users\Amit\javascript-code> node demo275.js [ 'Adam', 'Bob', 'Carol', 'Mike', undefined, undefined ]
ポイント解説
JavaScriptのArray.prototype.sort()は、ECMAScriptの仕様により、undefinedの要素を比較関数を呼び出すことなく自動的に配列の末尾へ移動させます。そのため、比較関数内ではlocaleCompare()を使って文字列同士を比較するだけでよく、結果として文字列部分が昇順に整列され、undefinedはすべて最後にまとめられます。
なお、比較関数の中で空文字列("")をチェックしているのは、万が一空の値が含まれていた場合にも後ろへ送るための安全策です。このように比較関数を工夫することで、欠損値を含むデータでも意図した順序でソート処理を行えます。
-
JavaScriptで配列にundefinedの「穴」を作成する方法
JavaScriptの配列にundefinedの穴を作成するには、大きめのインデックスに要素を追加し、その間にある小さいインデックスをあえて埋めずに残します。こうすることで、スキップされたインデックス部分が自動的にundefinedとして扱われます。具体的な動作を理解するために、以下の例を見てみましょう。サンプルコード次の例では、最初に3つの要素だけを持つ配列を宣言しています。その後、もともと存在しなかったインデックス5に新しい値を代入すると、間に挟まれたインデックス3と4が空いたままになり、実行結果に示すとおりundefinedが出力されます。<html> <body>
-
JavaScriptオブジェクトを配列プロパティの長さで並べ替える方法
この記事では、各オブジェクトが持つ配列プロパティの要素数(length)を基準にして、JavaScriptのオブジェクトを並べ替える方法を解説します。 ポイントとなる仕組み 並べ替えには Array.prototype.sort() メソッドを使用します。sort() の引数として比較関数(コンパレータ)を渡し、2つのオブジェクトの配列プロパティの length を比較することで、要素数の少ない順(昇順)にソートできます。比較関数は、条件を満たす場合に 1 を、満たさない場合に -1 を返すように記述します。 サンプルコード <!DOCTYPE html> <html la