如何使用localecompare对包含负值的数字数组进行排序?

use*_*287 1 javascript arrays

我正在尝试从最低值到最高值对数组进行排序。

下面的示例显示它已经以这种方式排序

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)

我看了看:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare

但似乎并未提及任何专门处理负数的内容。

对包含负值的数字数组进行排序的正确方法是什么?

Cer*_*nce 5

因为您的数组项可以直接强制为数字,所以为什么不这样做呢?

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之前出现在相同的数字上。