我明白我需要使用...排序() - 想一个很好的解释
var points = [40, 100, 1, 5, 25, 10]; points.sort(function(a, b){return b-a});
...排序为它的MAX值的数组。我已经阅读了MDN的文档,但我仍然不觉得我真的明白这里发生了什么。
谁能一些线索呢?
我明白我需要使用...排序() - 想一个很好的解释
var points = [40, 100, 1, 5, 25, 10]; points.sort(function(a, b){return b-a});
...排序为它的MAX值的数组。我已经阅读了MDN的文档,但我仍然不觉得我真的明白这里发生了什么。
谁能一些线索呢?
如果你打印一个并通过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
较小
一个进行比较,这是1则b变小
.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);
排序()方法采用一个可选参数,它定义排序顺序的功能。此函数的两个值在一个时间进行比较,交换它们必要时为了生成所述排序后的数组。
这个比较函数返回一个基本上控制排序顺序的数字。在你的情况下,函数返回第二个参数和第一个参数之间的差异,这意味着如果b> a(数组中前两个元素的情况:40和100),b将首先放置在结果数组后跟一个即排序数组降序。
根据函数的结果交换数组元素的过程将重复进行,直到不需要交换为止。请参阅Wikipedia的气泡排序说明:https://en.wikipedia.org/wiki/Bubble_sort
您可以确定'sort'不使用冒泡排序,它在比较后甚至不会“交换”它们。 – Bergi
“排序”的哪一部分你不理解? – Bergi