概要: このチュートリアルでは、オブジェクトのプロパティの値に基づいてオブジェクト配列をソートする方法を学びます。
Array sort() メソッドの紹介
JavaScriptのArrayオブジェクトは、配列項目をその場でソートし、ソートされた配列を返すsort()
メソッドを提供します。
sort()
メソッドの構文を以下に示します。
sort(comparator)
この構文において
comparator
は、配列内の項目の順序を決定するオプションの関数です。
comparator
関数は、比較する配列の要素である2つのパラメータaとbを受け取ります。
function fn(a,b) {
// ...
}
Code language: JavaScript (javascript)
comparator
関数は、a
がb
より大きいか、小さいか、等しいかを決定する数値を返す必要があります。
- 負の数は、
sort()
関数にa
をb
の前に配置するよう指示します。 - 正の数は、
sort()
関数にa
をb
の後に配置するよう指示します。 0
またはNaN
は、sort()
関数にa
とb
を等しいと扱うよう指示します。
sort()
メソッドは、項目がソートされた同じ元の配列への参照を返します。言い換えれば、元の配列内の項目の順序を変更します。
ソートされた項目を含む元の配列のコピーを返したくない場合は、toSorted()メソッドを使用できます。
sort()
メソッドを使用してオブジェクト配列をソートする方法を説明します。
数値によるオブジェクト配列のソート
次の例は、employee
オブジェクトの配列をスコアで昇順にソートする方法を示しています。
let employees = [
{ name: 'John', dob: 'Dec 15, 2007', score: 80 },
{ name: 'Ana', dob: 'Jan 15, 2009', score: 75 },
{ name: 'Zion', dob: 'Feb 15, 2011', score: 90 },
];
employees.sort((a, b) => a.score - b.score);
employees.forEach((e) => {
console.log(`${e.name} ${e.score}`);
});
Code language: JavaScript (javascript)
出力
Ana 75
John 80
Zion 90
動作原理
まず、各オブジェクトにname
、dob
、score
のプロパティを持つemployee
オブジェクトの配列を宣言します。
次に、sort()
メソッドを使用してスコアで従業員をソートします。
employees.sort((a, b) => a.score - b.score);
Code language: JavaScript (javascript)
sort()
メソッドは次の比較関数を使用します。
(a, b) => a.score - b.score
Code language: PHP (php)
この例では、aとbはどちらもname、dob、scoreプロパティを持つemployeeオブジェクトです。比較関数は、2つのemployeeオブジェクトのスコアを比較します。
スコアの降順での従業員のソート
スコアで降順に従業員をソートするには、比較関数を次のように変更する必要があります。
let employees = [
{ name: 'John', dob: 'Dec 15, 2007', score: 80 },
{ name: 'Ana', dob: 'Jan 15, 2009', score: 75 },
{ name: 'Zion', dob: 'Feb 15, 2011', score: 90 },
];
employees.sort((a, b) => b.score - a.score);
employees.forEach((e) => {
console.log(`${e.name} ${e.score}`);
});
Code language: JavaScript (javascript)
出力
Zion 90
John 80
Ana 75
文字列によるオブジェクト配列のソート
次の例は、従業員の名前をアルファベット順にソートする方法を示しています。
let employees = [
{ name: 'John', dob: 'Dec 15, 2007', score: 80 },
{ name: 'Ana', dob: 'Jan 15, 2009', score: 75 },
{ name: 'Zion', dob: 'Feb 15, 2011', score: 90 },
];
employees.sort((a, b) => a.name.localeCompare(b.name));
employees.forEach((e) => {
console.log(`${e.name} ${e.score}`);
});
Code language: JavaScript (javascript)
出力
Ana
John
Zion
日付によるオブジェクト配列のソート
従業員を誕生日(dob)でソートするには、
dob
を文字列からDate
オブジェクトに変換します。- 日付で従業員をソートします。
次のコードは、このアイデアを示しています。
let employees = [
{ name: 'John', dob: 'Dec 15, 2007', score: 80 },
{ name: 'Ana', dob: 'Jan 15, 2009', score: 75 },
{ name: 'Zion', dob: 'Feb 15, 2011', score: 90 },
];
employees.sort((a, b) => new Date(a.dob) - new Date(b.dob));
employees.forEach((e) => {
console.log(`${e.name} ${e.dob}`);
});
Code language: JavaScript (javascript)
出力
John - Dec 15, 2007
Ana - Jan 15, 2009
Zion - Feb 15, 2011
まとめ
- 指定されたプロパティの値でオブジェクト配列をソートするには、比較関数付きのsortメソッドを使用します。