gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:19:13 28 4
gpt4 key购买 nike

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

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

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"]

我看过:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare

但似乎并没有特别提到处理负数的任何内容。

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

最佳答案

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

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 之前。(同样的事情发生在正数上,它们只是排在后面)。

关于javascript - 如何使用 localecompare 对包含负值的数字数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56845100/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com