试图从一个只包含整数的数组中获得最大值和最小值似乎比我想象的要难。
var numArray = [140000, 104, 99]; numArray = numArray.sort(); console.log(numArray)
我希望这是99 104 140000。相反,它显示的是104、14万、99。看起来排序是把值当做字符串处理的。
有没有办法让排序函数对整数值进行排序?
试图从一个只包含整数的数组中获得最大值和最小值似乎比我想象的要难。
var numArray = [140000, 104, 99]; numArray = numArray.sort(); console.log(numArray)
我希望这是99 104 140000。相反,它显示的是104、14万、99。看起来排序是把值当做字符串处理的。
有没有办法让排序函数对整数值进行排序?
当前回答
只需执行.sort((a, b) => a - b),而不是.sort()本身
var numArray = [140000, 104,99]; numArray。排序((a, b) => a - b); console.log (numArray)
其他回答
下面的'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;
}
}
基于以上所有的答案,它们也可以像这样在一行中完成:
var numArray = [140000, 104, 99];
numArray = numArray.sort(function (a, b) { return a - b; });
//outputs: 99, 104, 140000
数组中。Sort默认执行字典排序,对于数字排序,提供自己的函数。这里有一个简单的例子:
function compareNumbers(a, b)
{
return a - b;
}
numArray.sort(compareNumbers);
还要注意,排序是“就地”工作的,不需要赋值。
对整数> 0排序,跳出框框思考:
函数sortArray(arr) { return new Promise((resolve) => { Const result = [] arr.forEach((item) => { setTimeout(() => { result.push(项) 如果结果。长度== arrr . Length) resolve(result) },项) }) }) } sortArray([4,2, 42岁,128年,56岁的2]),然后((结果)= > { document . write (JSON.stringify(结果)) })
请注意,这不应该有效地使用,.sort()更适合于此,检查其他答案
提升 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)