我正在尝试从最低值到最高值对数组进行排序。
下面的示例显示它已经按照这种方式进行了排序
var array = ["-394","-275","-156","-37","82","201","320","439","558","677","796"];
但是,当我这样做时:
var array = ["-394", "-275", "-156", "-37", "82", "201", "320", "439", "558", "677", "796"];
array.sort(function(a, b) {
return a.localeCompare(b, undefined, {
numeric: true
})
});
console.log(array);
返回此值(我不确定发生了什么排序):
["-37", "-156", "-275", "-394", "82", "201", "320", "439", "558", "677", "796"]
我看过:
,但似乎没有特别提及处理负数的任何内容。
对包含负值的数字数组进行排序的正确方法是什么?
答案 0 :(得分: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);
使用减法运算符的a - b
会将两边的表达式都强制转换为数字。
不幸的是,数字排序规则未考虑-
符号。您当前的代码会导致排序器将-
的数字排序在数字之前,而数字之前没有-
(因为从字法上来说-
在数字之前)。
console.log('-'.charCodeAt());
console.log('0'.charCodeAt());
所以
"-37",
"-156",
"-275",
"-394",
37在156之前,在275之前,在394之前。(正数也发生了同样的事情,它们都在后面)。
答案 1 :(得分:0)
只需使用sort
-您的所有项目都可以隐式转换为数字。
var array = ["-394","-275","-156","-37","82","201","320","439","558","677","796"];
const res = array.sort((a, b) => a - b);
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }