JavaScriptで文字列プロパティの値をもとにオブジェクトの配列を並べ替える方法
次のようなオブジェクトの配列があるとします。
const arr = [
{ first_name: 'Lazslo', last_name: 'Jamf' },
{ first_name: 'Pig', last_name: 'Bodine' },
{ first_name: 'Pirate', last_name: 'Prentice' }
];この配列を受け取り、last_nameキーの値をアルファベット順に並べ替えるJavaScript関数を作成する必要があります。
それでは、この関数のコードを書いてみましょう。
コード例
コードは次のとおりです。
const arr = [
{ first_name: 'Lazslo', last_name: 'Jamf' },
{ first_name: 'Pig', last_name: 'Bodine' },
{ first_name: 'Pirate', last_name: 'Prentice' }
];
const sortByLastName = arr => {
arr.sort((a, b) => {
return a.last_name.charCodeAt(0) - b.last_name.charCodeAt(0);
});
};
sortByLastName(arr);
console.log(arr);出力結果
コンソールには次のように出力されます。
[
{ first_name: 'Pig', last_name: 'Bodine' },
{ first_name: 'Lazslo', last_name: 'Jamf' },
{ first_name: 'Pirate', last_name: 'Prentice' }
]コードの解説
このコードでは、配列のsort()メソッドにコールバック関数を渡しています。コールバック関数の中では、charCodeAt(0)を使って各last_nameの先頭1文字の文字コードを取得し、その差を返すことで昇順に並べ替えています。差が負ならaが前、正ならbが前、0なら順序が維持されます。
より堅牢な方法:localeCompare()を使う
charCodeAt(0)は先頭の1文字しか比較しないため、先頭文字が同じ場合(例:「Smith」と「Sawyer」)には正しく並べ替えられない点に注意が必要です。文字列全体を比較したい場合は、localeCompare()メソッドを使うのがおすすめです。
const sortByLastName = arr => {
arr.sort((a, b) => a.last_name.localeCompare(b.last_name));
};localeCompare()は文字列全体を比較し、ロケールに応じた自然な順序で並べ替えを行えるため、実務ではこちらの方法がより安全で確実です。大文字・小文字が混在するデータでも安定した結果が得られます。
-
JavaScriptのArray.prototype.sort()メソッドの使い方をサンプルコードで解説
Array.prototype.sort()は、JavaScriptで配列の要素を並べ替えるための組み込みメソッドです。アルファベット順・数値順といった並び方に加えて、昇順・降順も自由に指定でき、配列操作の中でも特に使用頻度の高いメソッドの一つです。 ただし重要なポイントとして、sort()メソッドはデフォルトではすべての要素を文字列に変換してから比較します。そのため、数値の配列を意図したとおりに並べ替えたい場合は、比較関数を引数として渡す必要があります。 以下は、Array.prototype.sort()メソッドの基本的な使い方を示すサンプルコードです。 サンプルコード <!DOC
-
JavaScriptで2つのオブジェクトを比較しながら配列のネストされた値をグループ化する方法
この記事では、2つのオブジェクト(before と after)を比較しながら、ネストされた配列の値を1つの行にグループ化する方法を解説します。データの差分を表形式で整理したい場合などに役立つテクニックです。入力データの例まず、次のようなJSONオブジェクトがあるとします。before(変更前)と after(変更後)の2つの状態が含まれ、それぞれの device 配列の中に、id、price、features(機能名と価格)というネストされた構造を持っています。const input = { before: { device: [ { id: 1234