为什么这个函数返回元素按字母顺序排序而不是数字排序?无论是使用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
答案 0 :(得分:2)
由于Array#sort
按字母顺序排序,因此'11'
位于'2'
之前。
sort()
方法对数组in place的元素进行排序并返回数组。排序不一定是stable。默认排序顺序是根据字符串Unicode代码点。
要解决此问题,您可以使用带回调的数字排序,例如
array.sort(function (a, b) {
return a - b;
});
答案 1 :(得分:1)
这是因为默认排序顺序是根据字符串Unicode代码点,无论您输入什么。 <{1}}被隐式转换回字符串然后排序。
答案 2 :(得分:0)
并不是说你无法传递数字数组,无论你传递Array#sort
,它都会尝试根据它们的unicode表示进行比较。而是传递比较器,以比较排序时的比较方式
y.sort((a,b)=>a-b)
答案 3 :(得分:-1)
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.