JavaScript sort() 関数、例の紹介

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

codechachaCopyright ©2019 codechacha