LoginSignup
0
0

More than 3 years have passed since last update.

【JavaScript学習記録】sortの落とし穴

Posted at

 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 ]

 今回は、以下の記事を参考にさせて頂きました:relaxed::tulip:
https://secret-garden.hatenablog.com/entry/2017/10/24/191414

 また一つ勉強になりました:sparkles:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0