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

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

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

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


当前回答

如果有人不理解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),返回正值。

其他回答

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

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

var numArray = new Float64Array([140000, 104, 99]); numArray = numArray.sort(); 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)

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

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

提升 Const移动= [200,450,- 400,3000,-650,- 130,70,1300];

如果返回值小于0,则A将在B之前 如果返回值是> 0,那么B会在A之前

 movements.sort((a, b) => {
      if (a > b) return 1; //- (Switch order)
      if (a < b) return -1; //- (Keep order)
    });

A -当前值,b -下一个值。

下行 运动。排序((a, b) => { If (a > b)返回-1;// - (Keep) 如果(a < b)返回1;// - (Switch) });

! 改进,最佳解决方案!

movements.sort ((a, b) => a - b); // Same result!

如果a < b是负数(开关) 如果a < b是负数(Keep)

我同意aks,但是不用

return a - b;

你应该使用

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