数字・数値の順序とソート
JavaScriptで数字や数値の並び替えを行うと、数値の大きさではなく、辞書的な順番でソートが行われます。
つまり、“1"はもちろんそうなのですが、“10"も"2"と比較すると前にくることになります。
let numberStrings = ['1', '2', '3', '10', '11', '101', '200', '300'];
console.log(numberStrings.sort()); // ["1", "10", "101", "11", "2", "200", "3", "300"]
console.log(numberStrings.map((x) => Number(x)).sort()); // [1, 10, 101, 11, 2, 200, 3, 300]
数値の大きさでソートを行うためには、 sort関数 の第1引数に比較関数を指定してソート方法を数値の大小で行うようにします。
let numberStrings = ['1', '2', '3', '10', '11', '101', '200', '300'];
console.log(numberStrings.sort((a, b) => a - b )); // ["1", "2", "3", "10", "11", "101", "200", "300"]
localeCompare(compareString, locales, options)
を使用しても、
数値の大小としての比較を行う事ができます。
console.log('2'.localeCompare('1')); // 1 つまり '2' > '10'
console.log('2'.localeCompare('10', undefined, {numeric: true})); // -1 つまり '2' < '10
let numberStrings = ['1', '2', '3', '10', '11', '101', '200', '300'];
console.log(numberStrings.sort((a, b) => a.localeCompare(b, undefined, {numeric: true}))); // ["1", "2", "3", "10", "11", "101", "200", "300"]