我想知道当一个自定义排序函数如下所示时,javascript数组排序方法是如何工作的:
arr = [1, 5, 122, 12];
arr.sort(function (a,b){return a-b;});
如果它只接受" arr"中的两个参数a,b(1,5),我知道javascript允许的参数多于函数中指定的参数。但是如何排序函数,它比较1,5然后122,12,将结果存储在一个地方然后重做比较。
答案 0 :(得分:2)
指定自定义排序功能时
这不正确。您提供a function to compare items:
arr.sort() arr.sort(compareFunction)
compareFunction
指定定义排序顺序的函数。如果省略, 数组根据每个字符的Unicode代码点进行排序 值,根据每个元素的字符串转换。
排序算法本身在本机实现中是硬编码的,无法更改。实现甚至可以根据数据类型或数组长度选择不同的算法。
理由是您可能有不同的需求:
您可能希望使用二进制排序规则并使A
与a
不同,或者您可能希望使用西班牙语排序规则并使a
与á
相同。
您可能想要对自定义对象进行排序:
[
{
city: "Madrid",
population: 4000000
},
{
city: "Cairo",
pages: 15000000
}
]
或者您可能希望对水果进行排序并让pear
在apple
之前出现:)
但是,排序算法本身(quicksort等)是一个实现细节,通常对您的业务逻辑无关紧要。
答案 1 :(得分:0)
所以与两个以上的论点无关。
如果您询问它与它们进行比较的顺序,则由实施决定。您可以在函数中找到它执行console.log:
arr = [1, 5, 122, 12];
arr.sort(function (a,b){console.log('Comparing a:', a, 'and b:', b); return a-b;});