试图从一个只包含整数的数组中获得最大值和最小值似乎比我想象的要难。

var numArray = [140000, 104, 99]; numArray = numArray.sort(); console.log(numArray)

我希望这是99 104 140000。相反,它显示的是104、14万、99。看起来排序是把值当做字符串处理的。

有没有办法让排序函数对整数值进行排序?


当前回答

您可以简单地使用max()和min()内置函数来获得高度和最小值

var numArray = [140000, 104, 99];
console.log(Math.max(...numArray));
console.log(Math.min(...numArray));

如果你想按升序或降序排序

numArray.sort((a, b)=> a - b);

知道更多

其他回答

Array.prototype.sort()是用于排序数组的go to方法,但我们需要注意几个问题。

无论数组中值的类型如何,排序顺序默认是字典顺序,而不是数字顺序。即使数组都是数字,所有值也将转换为字符串并按字典顺序排序。

因此,我们需要像下面那样定制sort()和reverse()方法。

引用URL

用于对数组内的数字进行排序

numArray.sort(function(a, b)
{
    return a - b;
});

用于反转数组内的数字

numArray.sort(function(a, b)
{
    return b - a;
});

引用URL

数组中。Sort默认使用字母排序,而不是数字排序。

要支持数字,请添加如下的like

var numArray = [140000, 104, 99];
numArray.sort((a, b) =>  a - b); // <-- Ascending
numArray.sort((a, b) =>  b - a); // <-- Descending
console.log(numArray);

输出:

如果有人不理解Array.sort()如何处理整数,请阅读这个答案。

字母顺序排列:

默认情况下,sort()方法将值按字母和升序排列为字符串。

const myArray = [104, 140000, 99];
myArray.sort();
console.log(myArray); // output is [104, 140000, 99]

使用array.sort(compareFunction)的升序:

const myArray = [104, 140000, 99];
myArray.sort(function(a, b){
  return a - b;
});
console.log(myArray); // output is [99, 104, 140000]

w3schools的解释:

compareFunction定义了一个可选的排序顺序。函数应该返回一个负的、零的或正的值,这取决于参数,比如: 函数(a, b){返回a-b} 当sort()方法比较两个值时,它将值发送给compare函数,并根据返回值(负、零、正)对值进行排序。 例子: 当比较40和100时,sort()方法调用compare 函数(40100)。 该函数计算40-100,并返回-60(负值)。 sort函数将把40排序为低于100的值。

使用array.sort(compareFunction)按降序排列:

const myArray = [104, 140000, 99];
myArray.sort(function(a, b){
  return b - a;
});
console.log(myArray); // output is [140000, 104, 99]

这一次我们用b - a(即。, 100-40),返回正值。

打印稿变体

const compareNumbers = (a: number, b: number): number => a - b

myArray.sort(compareNumbers)

如果你需要从字符串列表中计算和排序最大的charCodeAt,这是正确的方法。

const arrayLines = '1.1.1.1\n1.0.1.1\n1.1.1.2\n1.1.1.0'.split('\n');

// Response: (4) ['1.0.1.1', '1.1.1.0', '1.1.1.1', '1.1.1.2']
arrayLines.sort((a, b) => {
    let a_charCodeSize = 0,
        b_charCodeSize = 0;

    // Loop true a & b characters and calculate the charCodeAt size.
    for (const aChar of a) a_charCodeSize += aChar.charCodeAt(0);
    for (const bChar of b) b_charCodeSize += bChar.charCodeAt(0);

    return a_charCodeSize - b_charCodeSize;
});