JavaScriptでオブジェクト配列をindexプロパティの値に基づいて並べ替える方法
はじめに
JavaScriptでは、オブジェクトが格納された配列を特定のプロパティの値に基づいて並べ替えたい場面がよくあります。本記事では、各オブジェクトが持つ index プロパティの値を基準に配列を昇順にソートし、その結果を文字列の配列へ変換する方法を解説します。
対象となるデータ
例として、次のようなオブジェクトの配列を想定します。
const arr = [
{
'name': 'd',
'index': 3
},
{
'name': 'c',
'index': 2
},
{
'name': 'a',
'index': 0
},
{
'name': 'b',
'index': 1
}
];この配列には、name と index という2つのプロパティを持つオブジェクトが含まれています。name は文字列、index は数値です。
要件
求められる処理は以下の通りです。
- 引数として上記のような配列を受け取る関数を作成する。
- オブジェクトの
indexプロパティの値に従って、配列を昇順に並べ替える。 - 並べ替えた結果から、各オブジェクトの
nameプロパティの値だけを取り出し、文字列の配列として返す。
したがって、先ほどの配列に対してこの処理を実行すると、最終的な出力は次のようになります。
const output = ["a", "b", "c", "d"];
実装例
実際のコードは以下のようになります。
const arr = [
{
'name': 'd',
'index': 3
},
{
'name': 'c',
'index': 2
},
{
'name': 'a',
'index': 0
},
{
'name': 'b',
'index': 1
}
];
const sortAndMap = (arr = []) => {
// 元の配列を変更しないようコピーを作成
const copy = arr.slice();
// indexプロパティの差で比較するソート関数
const sorter = (a, b) => {
return a['index'] - b['index'];
};
copy.sort(sorter);
// ソート済み配列からnameプロパティのみを抽出
const res = copy.map(({ name, index }) => {
return name;
});
return res;
};
console.log(sortAndMap(arr));コードの解説
この実装のポイントを順番に見ていきましょう。
- 配列のコピー:
slice()を使うことで、元の配列arrを破壊的に変更することを防いでいます。sort()は元の配列を直接書き換えるメソッドなので、副作用を避けたい場合にはコピーが有効です。 - 比較関数:
a['index'] - b['index']の結果が負ならaが先、正ならbが先に来ます。これによりindexの小さい順(昇順)に並びます。 - mapによる変換: 分割代入
({ name, index })を使って各オブジェクトからnameプロパティを取り出し、新しい文字列配列を生成しています。
出力結果
コンソールには以下のように出力されます。
[ 'a', 'b', 'c', 'd' ]
まとめ
sort() と map() を組み合わせれば、オブジェクト配列を任意のプロパティで並べ替え、必要な値だけを簡単に抽出できます。降順にしたい場合は、比較関数を b['index'] - a['index'] と逆にするだけで対応可能です。
-
JavaScriptのarray.keys()メソッドの使い方と実行例をわかりやすく解説
JavaScriptのarray.keys()メソッドとは JavaScriptのarray.keys()メソッドは、配列のキー(インデックス番号)を格納したArray Iteratorオブジェクトを返すメソッドです。戻り値はイテレータであるため、for...of文などを使って順番に値を取り出して利用します。 構文 array.keys() 引数は不要で、呼び出された配列の各要素のインデックス(0から始まる番号)を持つイテレータが返されます。 サンプル1:車種リストのキーを表示する 次の例では、「Crossover」「Convertible」「Hatchback」「SUV」という4つの車種
-
JavaScriptのArray.prototype.sort()メソッドの使い方をサンプルコードで解説
Array.prototype.sort()は、JavaScriptで配列の要素を並べ替えるための組み込みメソッドです。アルファベット順・数値順といった並び方に加えて、昇順・降順も自由に指定でき、配列操作の中でも特に使用頻度の高いメソッドの一つです。 ただし重要なポイントとして、sort()メソッドはデフォルトではすべての要素を文字列に変換してから比較します。そのため、数値の配列を意図したとおりに並べ替えたい場合は、比較関数を引数として渡す必要があります。 以下は、Array.prototype.sort()メソッドの基本的な使い方を示すサンプルコードです。 サンプルコード <!DOC