【JavaScript】sortメソッド その1

  • このエントリーをはてなブックマークに追加

sortメソッドは,その配列自身を中身をソートしたものに書き換える。ただし、このメソッドは、数値の配列を正しく並べ替えることができない。
JavaScriptの標準の比較関数は,比較の前に変数の型を調べない。どんな場合も要素を文字列とみなして比較されてしまう。
つまり、次のような挙動になる。




const n = [4, 8, 15, 16, 23, 42, 11, 1]
console.log(n);
n.sort();

console.log(n);

const n2 = ["4", "8", "15", "16", "23", "42","11","1"]
console.log(n2);
n2.sort();
console.log(n2);

/*

Array(8) [ 4, 8, 15, 16, 23, 42, 11, 1 ]
Array(8) [ 1, 11, 15, 16, 23, 4, 42, 8 ]
Array(8) [ "4", "8", "15", "16", "23", "42", "11", "1" ]
Array(8) [ "1", "11", "15", "16", "23", "4", "42", "8" ]

*/

sortメソッドに自分で作成した比較関数を渡すと、数値を昇順(1,2,3・・・)に並び変えることができる。
文字列「4」,「8」,「15」・・・も昇順に並び替えできているな。
これは、引き算すると強制的に数値に変換されいるからだな。


const n = [4, 8, 15, 16, 23, 42, 11, 1]
console.log(n);
n.sort(function(a, b) {
 return a - b;
});

console.log(n);

const n2 = ["4", "8", "15", "16", "23", "42","11","1"]
console.log(n2);
n2.sort(function(a, b) {
 return a - b;
});

console.log(n2);

/*

Array(8) [ 4, 8, 15, 16, 23, 42, 11, 1 ]
Array(8) [ 1, 4, 8, 11, 15, 16, 23, 42 ]
Array(8) [ "4", "8", "15", "16", "23", "42", "11", "1" ]
Array(8) [ "1", "4", "8", "11", "15", "16", "23", "42" ]

*/
  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*