JavaScriptの学習・参考リファレンス/ドキュメント

JavaScript、ECMAScriptの学習と参考メモ 入門~初心者~中級者~上級者を目指して

数字・数値の順序とソート

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"]
作成日 : 2020年06月18日