JavaScriptでオブジェクト配列を値に基づいて並べ替える方法
はじめに
JavaScriptでは、sort()メソッドを使うことで、キーと値のペアを持つオブジェクトの配列を、特定のプロパティの値に基づいて簡単に並べ替えることができます。文字列を比較する場合には、localeCompare()を組み合わせることで、アルファベット順に正確にソートできます。
例として、次のような学生情報のオブジェクト配列を用意します。
var details = [
{ studentId: 100, name: "John" },
{ studentId: 110, name: "Adam" },
{ studentId: 120, name: "Carol" },
{ studentId: 130, name: "Bob" },
{ studentId: 140, name: "David" }
];sort()による並べ替えの手順
上記の配列をnameプロパティ(値)に基づいて並べ替えるには、sort()メソッドを使用します。コールバック関数内でlocaleCompare()を呼び出すことにより、文字列同士が比較され、辞書順に並べ替えられます。
サンプルコード
以下がそのコードです。
var details = [
{ studentId: 100, name: "John" },
{ studentId: 110, name: "Adam" },
{ studentId: 120, name: "Carol" },
{ studentId: 130, name: "Bob" },
{ studentId: 140, name: "David" }
];
details = details.sort(function (obj1, obj2) {
return obj1.name.localeCompare(obj2.name);
});
console.log(details);プログラムの実行方法
上記のプログラムを実行するには、次のコマンドを使用します。
node fileName.js
ここでは、ファイル名をdemo253.jsとしています。
実行結果
コンソールには次のように出力されます。
PS C:\Users\Amit\javascript-code> node demo253.js
[
{ studentId: 110, name: 'Adam' },
{ studentId: 130, name: 'Bob' },
{ studentId: 120, name: 'Carol' },
{ studentId: 140, name: 'David' },
{ studentId: 100, name: 'John' }
]結果の解説
出力結果を見ると、studentIdの順番ではなく、nameのアルファベット順(Adam → Bob → Carol → David → John)に並べ替えられていることがわかります。localeCompare()はロケールに基づいて文字列を比較するため、日本語など多言語のデータを扱う際にも活用できます。
なお、数値プロパティでソートしたい場合は、コールバック関数内でreturn obj1.studentId - obj2.studentId;のように減算して比較するのが一般的です。昇順・降順は戻り値の符号を反転させることで切り替えられますので、用途に応じて使い分けましょう。
-
JavaScriptで変数を使ってオブジェクトのキーを動的に設定する方法
JavaScriptで変数を使ってオブジェクトのキーを設定する方法 JavaScriptでは、ブラケット記法(角括弧 [])を使用することで、変数の値をオブジェクトのキーとして動的に設定できます。ドット記法では変数をキーとして扱うことができないため、動的なキー設定にはブラケット記法が必須となります。 以下に、ユーザーが入力したプロパティ名とプロパティ値をオブジェクトに追加するサンプルコードを示します。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="U
-
JavaScript(jQuery)でJSONを解析して特定の名前と値のペアを表示する方法
JSONの解析にはparseJSON()を使用 jQueryでJSON文字列を解析(パース)するには jQuery.parseJSON() を使用します。そして、解析したオブジェクトから特定の名前と値のペアを取り出して表示したい場合は、$.each() 関数が便利です。 まず、例として次のようなJSONデータを用意し、これを解析してみましょう。 const APIData = [{Name:John,Age:21},{Name:David,Age:24},{Name:Bob,Age:20}]; const getObject = jQuery.parseJSON(APIData); APIDa