我正在尝试从最低值到最高值对数组进行排序。
下面的示例显示它已经以这种方式排序
var array = ["-394","-275","-156","-37","82","201","320","439","558","677","796"];
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时:
var array = ["-394","-275","-156","-37","82","201","320","439","558","677","796"];
Run Code Online (Sandbox Code Playgroud)
这返回(我不确定发生了什么排序):
["-37", "-156", "-275", "-394", "82", "201", "320", "439", "558", "677", "796"]
Run Code Online (Sandbox Code Playgroud)
我看了看:
但似乎并未提及任何专门处理负数的内容。
对包含负值的数字数组进行排序的正确方法是什么?
因为您的数组项可以直接强制为数字,所以为什么不这样做呢?
var array = ["-394","-275","-156","-37","82","201","320","439","558","677","796"];
array.sort(function(a,b) { return a - b } );
console.log(array);Run Code Online (Sandbox Code Playgroud)
的a - b,它采用了减法运算,将迫使双方的表达式为数字。
不幸的是,数字排序规则未考虑-符号。您当前的代码会导致排序器在-数字之前对数字进行排序,而不是-在数字之前(因为从字法上来说,-在数字之前)。
console.log('-'.charCodeAt());
console.log('0'.charCodeAt());Run Code Online (Sandbox Code Playgroud)
所以用
"-37",
"-156",
"-275",
"-394",
Run Code Online (Sandbox Code Playgroud)
37在156之前,在275之前在394之后。在256之前出现在相同的数字上。