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

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

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

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


当前回答

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

其他回答

只需执行.sort((a, b) => a - b),而不是.sort()本身

var numArray = [140000, 104,99]; numArray。排序((a, b) => a - b); console.log (numArray)

为了创建这种排序,你必须传递一个函数来检查哪个先出现。

在函数中定义你想检查的值:a.id - a.id

const myJson = [ {id: 1, name: 'one'}, {id: 4, name: 'four'}, {id: 2, name: ' 2 '}, {id: 3, name: ' 3 '} ]; //提供要检查的sort方法 const myNewSort = myJson。排序(函数(a, b) { 返回a.id - b.id; }); console.log('my new sort',myNewSort)

下面的'numerically'函数作为回调函数提供时,在许多情况下用于对数字数组进行数字排序:

function numerically(a, b){
    return a-b;
}

array.sort(numerically); 

但在一些罕见的情况下,数组包含非常大的负数,当a-b小于JavaScript可以处理的最小数字时,可能会发生溢出错误。

所以用数字表示函数的更好方法如下:

function numerically(a, b){
   if(a < b){
      return -1;
   } else if(a > b){
      return 1;
   } else {
      return 0;
   }
}

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

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

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

输出:

问题已经回答了,最短的方法是使用sort()方法。但如果你正在寻找更多的方法来排序你的数字数组,而且你也喜欢循环,请检查下面的方法

插入排序

上升: var numArray = [140000, 104, 99]; for (var i = 0; i < numArray.length; i++) { var target = numArray[i]; for (var j = i - 1; j >= 0 && (numArray[j] > target); j--) { numArray[j+1] = numArray[j]; } numArray[j+1] = 目标 } console.log(numArray);

降:

var numArray = [140000, 104, 99]; for (var i = 0; i < numArray.length; i++) { var target = numArray[i]; for (var j = i - 1; j >= 0 && (numArray[j] < target); j--) { numArray[j+1] = numArray[j]; } numArray[j+1] = 目标 } console.log(numArray);

选择排序:

提升:

var numArray = [140000, 104, 99]; for (var i = 0; i < numArray.length - 1, i++) { var min = i; for (var j = i + 1; j < numArray.length; j++) { if (numArray[j] < numArray[min]) { 最小值 = j; } } if (min != i) { var target = numArray[i]; numArray[i] = numArray[min]; numArray[min] = 目标; } } console.log(numArray);

降:

var numArray = [140000, 104, 99]; for (var i = 0; i < numArray.length - 1, i++) { var min = i; for (var j = i + 1; j < numArray.length; j++) { if (numArray[j] > numArray[min]) { 最小值 = j; } } if (min != i) { var target = numArray[i]; numArray[i] = numArray[min]; numArray[min] = 目标; } } console.log(numArray);

玩得开心