试图从一个只包含整数的数组中获得最大值和最小值似乎比我想象的要难。
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。看起来排序是把值当做字符串处理的。
有没有办法让排序函数对整数值进行排序?
当前回答
下面的'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;
}
}
其他回答
打印稿变体
const compareNumbers = (a: number, b: number): number => a - b
myArray.sort(compareNumbers)
这个答案与一些现有的答案是等价的,但是ECMAScript 6箭头函数提供了一个更紧凑的语法,允许我们在不牺牲可读性的情况下定义一个内联排序函数:
numArray = numArray.sort((a, b) => a - b);
现在大多数浏览器都支持它。
我很惊讶为什么每个人都建议将比较器函数传递给sort(),这使得排序非常慢!
要对数字排序,只需创建任何TypedArray:
var numArray = new Float64Array([140000, 104, 99]); numArray = numArray.sort(); 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);
玩得开心
提升 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)