试图从我知道只包含整数的数组中获取最高和最低值似乎比我想象的要难。
var numArray = [140000, 104, 99];
numArray = numArray.sort();
console.log(numArray)
我希望这能显示99, 104, 140000
. 相反,它显示104, 140000, 99
. 因此,排序似乎将值作为字符串处理。
有没有办法让排序函数对整数值进行实际排序?
试图从我知道只包含整数的数组中获取最高和最低值似乎比我想象的要难。
var numArray = [140000, 104, 99];
numArray = numArray.sort();
console.log(numArray)
我希望这能显示99, 104, 140000
. 相反,它显示104, 140000, 99
. 因此,排序似乎将值作为字符串处理。
有没有办法让排序函数对整数值进行实际排序?
默认情况下, sort 方法按字母顺序对元素进行排序。要按数字排序,只需添加一个处理数字排序的新方法(sortNumber,如下所示) -
var numArray = [140000, 104, 99];
numArray.sort(function(a, b) {
return a - b;
});
console.log(numArray);
文档:
MozillaArray.prototype.sort()
建议对不包含 Infinity 或 NaN 的数组使用此比较函数。(因为Infinity - Infinity
是 NaN,而不是 0)。
还有按键对对象进行排序的示例。
仅基于上述所有答案,它们也可以在一行中完成,如下所示:
var numArray = [140000, 104, 99];
numArray = numArray.sort(function (a, b) { return a - b; });
//outputs: 99, 104, 140000
我很惊讶为什么每个人都建议将比较器函数传递给sort()
,这使得排序真的很慢!
要对数字进行排序,只需创建任何 TypedArray:
var numArray = new Float64Array([140000, 104, 99]);
numArray = numArray.sort();
console.log(numArray)
array.sort默认情况下进行字典排序,对于数字排序,提供您自己的函数。这是一个简单的例子:
function compareNumbers(a, b)
{
return a - b;
}
numArray.sort(compareNumbers);
另请注意,排序“就地”工作,不需要分配。