JavaScriptでpriceプロパティを基準にオブジェクト配列をソートする方法
ここでは、住宅情報(ID、都市名、州、郵便番号、価格)を格納したオブジェクトの配列を例に考えます。
const arr = [
{
"h_id": "3",
"city": "Dallas",
"state": "TX",
"zip": "75201",
"price": "162500"
},
{
"h_id": "4",
"city": "Bevery Hills",
"state": "CA",
"zip": "90210",
"price": "319250"
},
{
"h_id": "5",
"city": "New York",
"state": "NY",
"zip": "00010",
"price": "962500"
}
];この配列を受け取り、各オブジェクトが持つ price プロパティ(現在は文字列型)を基準に、昇順または降順へ並べ替えるJavaScript関数を実装してみましょう。
実装コード
以下のコードでは、Array.prototype.sort() の比較関数の中で、単項プラス演算子「+」を使って文字列の価格を数値に変換し、その差を返しています。
const arr = [
{
"h_id": "3",
"city": "Dallas",
"state": "TX",
"zip": "75201",
"price": "162500"
},
{
"h_id": "4",
"city": "Bevery Hills",
"state": "CA",
"zip": "90210",
"price": "319250"
},
{
"h_id": "5",
"city": "New York",
"state": "NY",
"zip": "00010",
"price": "962500"
}
];
const eitherSort = (arr = []) => {
const sorter = (a, b) => {
return +a.price - +b.price;
};
arr.sort(sorter);
};
eitherSort(arr);
console.log(arr);出力結果
コンソールには次のように表示されます。
[
{
h_id: '3',
city: 'Dallas',
state: 'TX',
zip: '75201',
price: '162500'
},
{
h_id: '4',
city: 'Bevery Hills',
state: 'CA',
zip: '90210',
price: '319250'
},
{
h_id: '5',
city: 'New York',
state: 'NY',
zip: '00010',
price: '962500'
}
]コードのポイント
- 文字列から数値への変換: 単項プラス演算子「+」を付けることで、
"162500"のような文字列を数値として扱えます。これにより、文字列同士の辞書順比較ではなく、正しい数値順の並べ替えが可能になります。 - 降順にしたい場合: 比較関数の引き算の順序を逆にし、
+b.price - +a.priceとすれば降順になります。 - 元の配列への影響:
sort()は元の配列を直接変更します。元の配列を保持したい場合は、ES2023で追加されたtoSorted()を使うと、新しい配列を返す安全なソートが行えます。
-
JavaScriptのArray.flatMap()メソッドとは?ネスト配列をフラット化する使い方を実例で解説
JavaScriptのflatMap()メソッドは、ネストされた配列の各要素にコールバック関数を適用し、その結果を1階層だけ平坦化(フラット化)して、新しい配列として返します。「map()」と「flat()」を組み合わせた処理を1つのメソッドで実現できるため、入れ子構造の配列をシンプルに変換したい場合にとても便利です。元の配列は変更されず、常に新しい配列が生成される点も覚えておきましょう。以下は、array.flatMap()メソッドを使った具体的なサンプルコードです。サンプルコード<!DOCTYPE html> <html lang="ja"> &
-
JavaScriptのslice()メソッドとは?配列から要素を取り出す使い方を実例で解説
JavaScriptのslice()メソッドは、大きな配列の中から選択した範囲の要素を抜き出し、新しい配列として返すメソッドです。最大の特徴は、元の配列を一切変更しない(非破壊的な操作)という点にあります。そのため、元データを保持したまま部分的なコピーを作りたい場合に非常に便利です。 slice()メソッドの基本構文 arr.slice(start, end) start:取り出しを開始するインデックス番号(省略可・デフォルトは0) end:取り出しを終了する位置の直前のインデックス番号(省略可・デフォルトは配列の末尾まで)。endで指定した要素自体は結果に含まれない点に注意してください。