为什么按字母顺序排序数字输入?

问题描述:

为什么这个函数返回的元素按字母顺序排序而不是数字排序?无论使用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代码点。

为了克服这个问题,你可以使用一个数值排序有一个回调,像

array.sort(function (a, b) { 
    return a - b; 
}); 
+0

Oy。显然这是[它如何正确完成](https://*.com/a/21595293/403455)。 –

,由于默认的排序顺序是按照字符串的Unicode代码点,无论你输入的是什么。您的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. 
+0

订单可以是“默认”或“您在分类功能中编程的任何内容”。没有“数字”或“升序/降序”的特殊设置。 –

它不是,你是无法传递一个数字数组,无论你通过Array#sort会尝试他们的Unicode表示的基础上进行比较。取而代之的是通过一个比较器,比较你想在排序时想要比较的方式

y.sort((a,b)=>a-b)