我明白我需要使用......
var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b-a});
...为数组排序其MAX值。我已经阅读了MDN的文档,但我仍然觉得我真的不明白这里发生了什么。
任何人都可以对此有所了解吗?
答案 0 :(得分:2)
.sort()
函数使用优化的排序算法。默认情况下,它会进行词法比较。如果您想使用优化算法,但使用其他比较函数(如数值比较或任何其他类型的自定义排序),那么您需要告诉它的一件事是如何比较两个值。每当它尝试比较数组中的两个值时,它都会调用您的自定义比较函数并将每个值传递给您。然后,您可以使用自定义方式比较这两个值,并返回指示哪个值更高或值是否相等的值。然后,内部.sort()
算法使用该信息将这两个值相对于彼此正确定位。
您的自定义函数会返回三种可能之一,负数,零或正数,具体取决于a < b
,a === b
还是a > b
。
只做return b - a
的函数是一个非常简单的反向数字排序(最高值优先)。如果b > a
,则会返回一个数字> 0
。如果b === a
,则会返回0
。而且,如果b < a
,则会返回一个< 0
,这正是.sort()
回调需要做的。
如果您真的只想要最大值并且不需要对数组进行实际排序,那么您可以这样做:
var points = [40, 100, 1, 5, 25, 10];
var maxPoint = Math.max.apply(Math, points);
// should output
document.write(maxPoint);
&#13;
答案 1 :(得分:1)
如果从传递的匿名函数打印a和b
var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){console.log('a = '+ a + ' b = ' + b);return b-a});
a = 40 b = 100
a = 40 b = 1
a = 1 b = 5
a = 40 b = 5
a = 1 b = 25
a = 5 b = 25
a = 40 b = 25
a = 1 b = 10
a = 5 b = 10
a = 25 b = 10
[100, 40, 25, 10, 5, 1]
所以这里
b
为100且a
为40,因此b - a
为正数,因此a
较小
a与下一个b进行比较,其为1然后b变小
答案 2 :(得分:0)
sort()方法接受一个可选参数,一个定义排序顺序的函数。此函数一次比较两个值,必要时交换它们以生成排序数组。
此比较函数返回一个基本上控制排序顺序的数字。在你的情况下,函数返回第二个arg和第一个arg之间的差异,这意味着如果b> a(在数组的前2个元素的情况下:40和100),b将首先放在结果数组中,然后对数组进行降序排序。
基于函数结果交换数组元素的过程重复进行,直到不需要交换为止。请参阅维基百科的冒泡排序说明:https://en.wikipedia.org/wiki/Bubble_sort