【JavaScript学習記録】sortの落とし穴
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
また一つ勉強になりました
Author And Source
この問題について(【JavaScript学習記録】sortの落とし穴), 我々は、より多くの情報をここで見つけました https://qiita.com/reika2525smile/items/fedb75cd3c48758b258b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .