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

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

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

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


当前回答

你可以简单地排序数字数组

常量数字=[13,17,14,19,16]; 让温度; for(let i=0;i<num.length;i++){ for(let j=i+1;j<num.length;j++){ if(num[i]>num[j]){ 温度=数字[i] 数字[i]=数字[j] 数字[j]=温度 } } } 控制台.log(数字);

其他回答

如果你需要从字符串列表中计算和排序最大的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;
});

我同意aks,但是不用

return a - b;

你应该使用

return a > b ? 1 : a < b ? -1 : 0;

在JavaScript中,sort()方法的默认行为是对数组中的值按字母顺序排序。

要按数字排序,你必须定义一个数值排序函数(这很简单):

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

numArray = numArray.sort(sortNumber);

当数组只包含没有无穷大或NaN的数字时,接受的答案和类似numArray.sort((a,b) => a - b)的等价物是很好的。它们可以被扩展到处理无穷大和NaN,如下所示:

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

这将NaN(或任何非数字,如'foo'或{})排序为0。最后的|| 0需要处理a和b等于无穷大的情况。

我很惊讶为什么每个人都建议将比较器函数传递给sort(),这使得排序非常慢!

要对数字排序,只需创建任何TypedArray:

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