为什么按字母顺序排序数字输入?
问题描述:
为什么这个函数返回的元素按字母顺序排序而不是数字排序?无论使用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;
});
答
,由于默认的排序顺序是按照字符串的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)
Oy。显然这是[它如何正确完成](https://*.com/a/21595293/403455)。 –