JavaScriptソートすると、数字でも文字列として処理されてしまいます。 なんかイケてないですね。

var ary = new Array(89, 4103, 123);
ary.sort();
alert(ary);    // => 123,4103,89


JavaScriptで数字のソート

数字としてソートしたい場合は、コールバック使います。

var ary = [5,3,9,1,10]
ary.sort( function(a,b){
  if( a < b ) return -1;
  if( a > b ) return 1;
  return 0;
});
alert(ary);    // => 1,3,5,9,10


引き算で簡潔に

MDNにも例が載っていました。引き算で簡単にかかれてました。

var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b){
  return a - b;
});
console.log(numbers);   // => [1, 2, 3, 4, 5]


関数を分けるのであれば、

var numbers = [4, 2, 5, 1, 3];
var f = function (a, b){
  return a - b;
}
console.log(numbers.sort(f));   // => [1, 2, 3, 4, 5]


アロー関数式で、より短い構文で

let numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => a - b);
console.log(numbers);   // => [1, 2, 3, 4, 5]


参考:Array.prototype.sort() - JavaScript MDN

2021/06/14