JavaScirptでコードを書いている時に、思った通りの挙動をしてくれないことがあります。
今回は、JavaScriptで注意したいポイントの1つ、"sort"について取り上げます。
・.sort( ) ・・・配列の要素を in place でソートします。既定のソート順は昇順で、要素を文字列に変換してから、UTF-16 コード単位の値の並びとして比較します。(MDNより)
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
ここで注目したいのは、__”要素を文字列に変換してから・・・”__という表記。
__"文字列に変換してから並べ替えること"__で、次のような問題が起こります。
// 数値の並べ替えをする場合
const data = [3, 10, 1, 20, 22, 2, 15]
console.log(data.sort());
// => [ 1, 10, 15, 2, 20, 22, 3 ]
先頭の1文字目を基準に並べ替えられてしまっています。
これを解決するには、以下のように比較関数を指定する必要があります。
// 比較関数は a > b ならプラス値、a < b ならマイナス値を返す
data.sort((a, b) => a - b)
// => [ 1, 2, 3, 10, 15, 20, 22 ]
今回は、以下の記事を参考にさせて頂きました
https://secret-garden.hatenablog.com/entry/2017/10/24/191414
また一つ勉強になりました