sort()
関数を使って配列、Map、Set オブジェクトをソートする方法と例を紹介します。
1. 配列の並べ替え
1.1 文字列の配列
文字列配列は以下のように sort()
を呼び出すとアルファベット順に昇順ソートになります。
降順でソートするには、関数をsort()に渡して降順で計算されるように実装する必要があります。
const fruits = ['kiwi', 'apple', 'melon', 'banana'];
// ascending sort
fruits.sort();
console.log(fruits);
// descending sort
fruits.sort(function (a, b) {
if (a > b) return -1;
else if (b > a) return 1;
else return 0;
});
console.log(fruits);
Output:
[ 'apple', 'banana', 'kiwi', 'melon' ]
[ 'melon', 'kiwi', 'banana', 'apple' ]
1.2 数値配列
以下のように数値配列に sort()
を呼び出すと、正しくソートされません。数字が文字列として認識され、文字の順序でソートされるためです。
const numbers = [10, 2, 16, 8, 4, 5];
numbers.sort();
console.log(numbers);
Output:
[ 10, 16, 2, 4, 5, 8 ]
数値サイズでソートするには、関数を関数sort()に渡して数値サイズでソートするように実装する必要があります。 次の例は、数値配列が昇順と降順に並べられるように実装された例です。
const numbers = [10, 2, 16, 8, 4, 5];
// ascending sort
numbers.sort((a, b) => a - b);
console.log(numbers);
// descending sort
numbers.sort((a, b) => b - a);
console.log(numbers);
Output:
[ 2, 4, 5, 8, 10, 16 ]
[ 16, 10, 8, 5, 4, 2 ]
1.3 オブジェクトの配列
オブジェクト配列も sort()
の引数でどのようにソートするかを直接実装内容を関数に渡す必要があります。
以下の例は、オブジェクトの id
値の大きさに昇順に並べ替えるように実装しています。
const arr = [
{id: 22, name: 'kiwi' },
{id: 11, name: 'apple' },
{id: 2, name: 'melon' },
{id: 9, name: 'grape' }
];
arr.sort((a, b) => a.id - b.id);
console.log(arr);
Output:
[
{ id: 2, name: 'melon' },
{ id: 9, name: 'grape' },
{ id: 11, name: 'apple' },
{ id: 22, name: 'kiwi' }
]
2. Mapソート
Mapをソートするときは、まずSpread演算子を使ってMapの key-value
要素を配列に変換します。
そして配列に対して sort()
関数でソートすると、key を基準に昇順にソートされます。
let myMap = new Map([
['c', 2],
['a', 4],
['d', 1],
['b', 3],
]);
let elementsArray = [...myMap];
console.log(elementsArray);
let sortedAscArray = [...myMap].sort();
console.log(sortedAscArray);
Output:
[ [ 'c', 2 ], [ 'a', 4 ], [ 'd', 1 ], [ 'b', 3 ] ]
[ [ 'a', 4 ], [ 'b', 3 ], [ 'c', 2 ], [ 'd', 1 ] ]
降順でソートするか、valueでソートする方法については、JavaScript - Mapソート(keyまたはvalueでソート)を参照してください。
3. Setソート
Setは順序を保証しないデータ構造なので、ソートして保存することはできません。
そのため、SetをArrayに変換してArrayをソートする必要があります。降順に並べ替える方法は、配列の並べ替えで紹介した方法と同じです。
const set1 = new Set(['d', 'c', 'b', 'a']);
const sorted = Array.from(set1).sort();
console.log(sorted);
Output:
[ 'a', 'b', 'c', 'd' ]
Related Posts
- JavaScript - 現在のタイムスタンプを取得する
- Node.js - ファイル、ディレクトリの削除
- JavaScript - 文字列 空白 削除
- JavaScript sort() 関数、例の紹介
- JavaScript Set delete() 関数、値の削除
- JavaScript - 実行時間の測定方法
- JavaScript - 配列をオブジェクトに変換する4つの方法
- JavaScript - Mapの作成と初期化、3つの方法
- JavaScript - Map巡回、3つの方法
- JavaScript - Mapソート(キーまたはvalueでソート)
- JavaScript - オブジェクトに特定の値が存在することを確認する
- JavaScript - 数値がNaNであるかどうかを確認する方法
- JavaScript Enum (列挙型)
- JavaScript - 日付/時刻比較、3つの 方法
- JavaScript - 空の文字列の確認、2つの方法
- JavaScript - 最後の文字を削除する、4つの方法
- JavaScript - 配列を文字列に変換、3つの方法
- JavaScript - 複数行の文字列、3つの方法
- JavaScript - オブジェクトを文字列に変換する2つの方法
- JavaScript - 配列から重複排除、4つの方法
- JavaScript - 文字列の比較方法、5つの方法
- JavaScript - 文字列から数字のみを抽出する
- JavaScript - 配列のソート方法(昇順、降順)
- JavaScript - 文字列 切り出し(split、substr、substring、slice)
- JavaScript - Setを配列(Array)に変換する
- JavaScript - 文字列を配列(Array)に変換
- JavaScript - 関数の宣言方法
- JavaScript - 配列宣言、追加、削除などの基本的 な使用法のクリーンアップ
- JavaScript - 文字列を数値に変換する方法
- JavaScript - 文字列を結合する、接続する(concat、join、+)