なぜこの関数は数値ではなくアルファベット順にソートされた要素を返しますか? Number
かParseFloat
のどちらを使用しても同じ結果が得られます。なぜ数値入力のアルファベット順ソートですか?
function sortMe() {
var x = ["1.0","2.5", "11.0"];
var y = x.map(Number);
Logger.log(y.sort());
}
結果:1,11,2.5
なぜこの関数は数値ではなくアルファベット順にソートされた要素を返しますか? Number
かParseFloat
のどちらを使用しても同じ結果が得られます。なぜ数値入力のアルファベット順ソートですか?
function sortMe() {
var x = ["1.0","2.5", "11.0"];
var y = x.map(Number);
Logger.log(y.sort());
}
結果:1,11,2.5
はArray#sort
ソートがアルファベット順なので、そう'11'
は'2'
の前に来ます。
sort()
方法は、配列in placeの要素をソートし、配列を返します。並べ替えは必ずしもstableではありません。デフォルトのソート順は、文字列のUnicodeコードポイントに従います。
この問題を解決するには、デフォルトのソート順は関係なく、あなたの入力が何であるか、文字列のUnicodeコードポイントに応じていないためだ
array.sort(function (a, b) {
return a - b;
});
のようなコールバックと数値の並べ替えを、使用することができます。 Number
は暗黙的に文字列に変換されてからソートされます。
sort()メソッドは、配列の項目をソートします。
ソート順は、英字または数字、昇順(上)または降順(下)のいずれかです。
デフォルトでは、sort()メソッドは、各要素のUnicodeポイント値に対して、値をアルファベット順および昇順で文字列としてソートします。
var fruit = ['cherries', 'apples', 'bananas'];
fruit.sort(); // ['apples', 'bananas', 'cherries']
var scores = [1, 10, 21, 2];
scores.sort(); // [1, 10, 2, 21]
// Note that 10 comes before 2,
// because '10' comes before '2' in Unicode code point order.
var things = ['word', 'Word', '1 Word', '2 Words'];
things.sort(); // ['1 Word', '2 Words', 'Word', 'word']
// In Unicode, numbers come before upper case letters,
// which come before lower case letters.
注文は「デフォルト」または「あなたのソート機能でプログラムするもの」のいずれかにすることができます。 "数値"または "昇順/降順"の特別な設定はありません。 –
そのはあなたが彼らのUnicode表現に基づいて比較してみますArray#sort
を渡すどんな数値配列を渡すことができないではないこと:
y.sort((a,b)=>a-b)
Oy。どうやらこれは[それがどう正しく行われたか](https://stackoverflow.com/a/21595293/403455)です。 –